JClassLib

Java随笔

寵の児 提交于 2021-02-14 23:28:43
1.switch 控制表达式支持的类型有byte、short、char、int、enum(Java 5)、String(Java 7)。 2.nagios+python 系统监控 3.RestTemplate对接 4.工作流activity 5.swing theme swing theme http://www.open-open.com/61.htm napkinlaf http://napkinlaf.sourceforge.net/ jtattoo http://www.jtattoo.net/ //change theme core code UIManager.setLookAndFeel("com.seaglasslookandfeel.SeaGlassLookAndFeel"); SwingUtilities.updateComponentTreeUI(ShowTabPanel.this);//ShowTabPanel extends JFrame 6.数据库连接池proxool 7.修改.class文件:jclasslib.jar 8.打包插件fatjar 9.EJB事务传播属性 https://www.ibm.com/developerworks/cn/java/j-lo-springejbtrans/ 10.Jvm分析工具

你真的懂i++和++i吗?从字节码理解它吧!

不问归期 提交于 2020-10-14 11:19:37
i++ 在初次学习 i++ 和 ++i 时我们就一直牢记着: i++ 是先使用后加1, ++i 是先加1再使用,长时间都一直这样搬着砖(这结论当然是没毛病的),我也是。直到我看见了下面的题目。 public static void func ( ) { int i = 0 ; for ( int j = 0 ; j < 100 ; j ++ ) { i = i ++ ; } Stystem . out . println ( i ) ; //打印什么??? } 我是觉得打印100的,毫无疑问,我错了。 对了也就没此文了。 看来我还是太菜了,看看字节码吧! 0 iconst_0 1 istore_0 2 iconst_0 3 istore_1 4 iload_1 5 bipush 100 7 if_icmpge 21 ( + 14 ) 10 iload_0 11 iinc 0 , 1 14 istore_0 15 iinc 1 , 1 18 goto 4 ( - 14 ) 21 getstatic # 2 < java / lang / System . out > 24 iload_0 25 invokevirtual # 3 < java / io / PrintStream . println > 28 return 其中10~14对应的就是 i=i++ 的字节码

日常记录——JVM—JVM简介、class文件解析

99封情书 提交于 2020-08-16 00:05:52
一、JVM简介 JVM :Java Virtual MAchine-Java虚拟机,可以将class文件解释为各种平台可执行的指令行,java中一个类在运行时,首先将java文件编译(javac)为class文件,然后jvm将class文件解释并执行。 JVM可分为三部分:类加载器(ClassLoader)系统、执行引擎、运行时数据区。 类加载器系统 :负责加载程序中的类和接口。 执行引擎 :解释执行+即时编译(JIT),开始对所有的代码都采取解释执行的方式,经常调用的热点方法编译为本地代码(热点代码频率设置-XX:CompileThreshould = 值(默认10000)),默认是解释执行+即时编译(-Xmixed)模式,可设置为纯解释(-Xint)或者纯编译(-Xcomp)模式,纯解释加载快,执行慢,纯编译加载慢,执行快。 运行时数据区 :程序计数器、本地方法栈、虚拟机栈、堆、方法区。 1.程序计数器:指向当前线程所执行的字节码的行号,线程私有。 2.本地方法栈:存储本地方法调用的状态,Native方法,线程私有。 3.虚拟机栈:存储局部变量表,操作数栈,动态链接,方法出口等信息,线程私有。 4.堆:虚拟机启动时创建,存放对象实例和数组,GC工作区域,线程共享。 5.方法区:存储类的信息,如常量(final)、静态变量(static)、JIT(即时编译器)编译后的代码

IDEA常用插件

江枫思渺然 提交于 2020-08-15 12:31:26
lombok 自动生成getter,setter jclasslib 反编译源码 pom.xml文件中依赖 <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> 来源: oschina 链接: https://my.oschina.net/u/589570/blog/4411264

JVM 异常表及 try-catch-finally 字节码分析

牧云@^-^@ 提交于 2020-08-11 07:23:31
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 作为一个“有经验”的 Java 工程师,你一定知道什么是try-catch-finally代码块。但是你知道 JVM 是如何处理异常的吗?今天我们就来讲讲异常在 JVM 中的处理机制,以及字节码中异常表。 希望在这之后,不会有人再将下面这张表情包发给你…… 环境介绍 jdk 1.8.0_151 IntelliJ IDEA 及 jclasslib 插件 字节码中的 try-catch Talk is cheap, show you my code! 反编译后的字节码 首先我编写了第一段测试代码,这里有一个 try-catch 代码块,每个代码块中都有一行输出,在 catch 代码块中捕获的是 Exception 异常。 然后在命令行中先定位到这个类的字节码文件目录中,执行主方法后敲下javap -c 类名进行反编译,或者直接在编译器中选择Build Project,然后打开 jclasslib 工具就可以看到这个类的字节码。 我选择了第二个方法,主方法的字节码如下图: 可以看到0~3行是 try 代码块中的输出语句,12~17行是 catch 代码块中的输出语句。然后重点来了。 第8行的字节码是8 goto 20,这是什么意思呢?没错,盲猜就能猜到

从栈帧看字节码是如何在JVM中进行流转的

做~自己de王妃 提交于 2020-08-08 01:01:22
从栈帧看字节码是如何在JVM中进行流转的 我们都知道java文件需要编译成class文件,然后jvm负责加载并运行class文件,那么字节码文件长什么样子?字节码又是怎么执行的? 工具介绍 javap javap是JDK自带的查看字节码的工具。 javap的使用方法如下: $ javac Demo.java $ javap -p -v Demo javap命令打印的文件内容有时候过多,可以使用 javap -p -v Demo >> Demo.javap 将内容追加至文本文件中,再用文本工具打开分析。 有时候class文件中没有生成LineNumberTable或LocalVariableTable,可以在编译时使用下面的参数强制生成: javac -g:lines 强制生成LineNumberTable。 javac -g:vars 强制生成LocalVariableTable。 javac -g 生成所有的debug信息。 LocalVariableTable就是栈帧中的局部变量表。 LineNumberTable描述源码行号与字节码行号(字节码偏移量)之间的对应关系,有了这些信息,在debug时,就能够获取到发生异常的源代码行号。 jclasslib 如果你不太习惯使用命令行的操作,还可以使用jclasslib,jclasslib是一个图形化的工具

开发工具

半城伤御伤魂 提交于 2020-08-06 13:19:06
编辑器 Idea Eclipse Webstrom Phycharm Clion Vscode Notepad++ Navicat Xshell Xftp Postman XMind ProcessOn Typora Chrome Git 环境 Redis Tomcat Maven Mysql 其他 showdoc finebi Matlab,Lingo,Stata,SPSS24 Idea插件(Lombok,hutools,EasyCode,jclasslib) 来源: oschina 链接: https://my.oschina.net/codeccb/blog/4474187

【转】为什么使用length获取Java数组的长度

我怕爱的太早我们不能终老 提交于 2020-04-24 20:16:45
记得 vamcily 曾问我:“为什么获取数组的长度用.length(成员变量的形式),而获取String的长度用.length()(成员方法的形式)?” 我当时一听,觉得问得很有道理。做同样一件事情,为什么采用两种风格迥异的风格呢?况且,Java中的数组其实是完备(full-fledged)的对象,直接暴露成员变量,可能不是一种很OO的风格。那么,设计Java的那帮天才为什么这么做呢? 带着这个疑问,我查阅了一些资料,主要是关于“JVM是如何处理数组”的。 数组对象的类是什么? 既然数组都是对象,那么数组的类究竟是什么呢?当然不是java.util.Arrays啦!我们以int一维数组为例,看看究竟。 [java] view plain copy public class Main { public static void main(String args[]){ int a[] = new int [ 10 ]; Class clazz = a.getClass(); System.out.println(clazz.getName()); } } 在SUN JDK 1.6上运行上述代码,输出为: [I 看起来数组的类很奇怪,非但不属于任何包,而且名称还不是合法的标识符(identifier)。具体的命名规则 [1] 可以参见 java.lang.Class.getName(

JVM基础结构与字节码执行引擎

倖福魔咒の 提交于 2020-04-11 15:38:42
JVM基础结构与字节码执行引擎 JVM基础结构 JVM内部结构如下:栈、堆。 栈 JVM中的栈主要是指线程里面的栈,里面有方法栈、native方法栈、PC寄存器等等;每个方法栈是由栈帧组成的;每个栈帧是由局部变量表、操作数栈等组成。 每个栈帧其实就代表一个方法 堆 java中所有对象都在堆中分配;堆中对象又分为年轻代、老年代等等,不同代的对象使用不同垃圾回收算法。 -XMs:启动虚拟机预留的内存 -Xmx:最大的堆内存 一、堆的分代假设 根据研究表明,堆中对象大部分都是创建后,立马就可以被销毁的。如: 为了优化堆中的内存,将堆中对象分为不同代。在年轻代中,GC发生比较频繁;在老年代中,GC发生比较少。 二、堆的分代 年轻代:Young Generation 老年代:Old Generation/Tenured 永久代:Permanent Generation 永久代在Java虚拟机规范中是没有的,但是Host Spot虚拟机中有。 三、方法区 方法区被所有线程共享;方法区是用来存储编译后的代码,即存储每个类的运行时常量池、字段和方法。 方法区在虚拟机启动时创建;虽然方法区在逻辑上是堆的一部分,但在一些简单的实现中,方法区可以选择不进行垃圾回收和紧凑化。 方法区在java8的变化 java7之前:方法区的实现:永久代,是作为堆的一部分; java8之后:方法区的实现