1:JVM基础知识 什么是JVM 1. java虚拟机,跨语言的平台,实现java跨平台 2. 可以实现多种语言跨平台,只要该语言可以编译成.class文件 3. 解释执行.class文件 java是跨平台的语言,JVM是跨语言的平台
JVM运行流程
1. preparation 默认值=>初始值=> 2. 类加载器(jvm是按需动态加载,采用双亲委派机制,自底向上检查该类是否已经加载) 3. 为什么要使用双亲委派,为了安全 4. 自定义ClassLoader(customer Class Loader)=>classpath指定内容(App)=>加载扩展包(jre.lib.ext *.jar)=>加载rt.jar等核心包(BootStrap)
常见的JVM
1. Hotspot oracle
2. Jrocket BEA被oracle收购
3. J9 IBM
4. VM Microsoft
5. TaobaoVM 阿里
6. LiQuidVM 直接针对硬件 oracle
7. zing azul最新垃圾回收的业界标杆
2:ClassFileFormat
数据类型:u1 u2 u4 u8和_info(表类型)
1. _info的来源是hotspot源码中的写法
查看16进制格式的ClassFile
1. sublime/notepad/
2. IDEA插件-BinEd
有很多可以观察ByteCode的方法
1. javap
javap -v E:\JVM\out\production\JVM\com\bytecode\T0100_ByteCode01.class
2. JBE-可以直接修改
3. JClassLib-IDEA插件
4. classfile组成
ClassFIle{
u4 magic;
u2 miner_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count - 1];
u2
}
5. 二进制文件详解