JVM学习
JVM
1、JVM是一个跨语言的平台,与语言无关
2、java虚拟机规范:一流企业做标准,二流企业做品牌,三流企业做产品
JVM种类
Hotspot:Oracle 公司,有商业版和免费版
open jdk 内部包含免费版本hotspot虚拟机
Jrockit: BEA公司,曾经号称世界最快的虚拟机,后被Oracle收购,合并到Hotspot虚拟机
J9:IBM公司
Microsoft VM:微软
TaobaoVM:阿里,Hotspot深度定制版
LiquidVM:直接针对硬件,效率极高
azul zing:商业版本,速度快,垃圾回收1ms以内
垃圾回收算法被Hotspot吸收,衍生现在的ZGC
等等
3、JDK、JRE和JVM三者关系
JDK: 包括JRE和java 开发工具包
JRE: java运行是环境,包括JVM和java的核心类库
JVM: java虚拟机,运行字节码文件的平台
Class 文件
magic number:4个字节
minor version :2个字节
major version :2个字节
constant_pool_count :2个字节,常量池数量,最多存储常量数量2^16个
constant_pool :常量池,长度为constant_pool_count-1的的表
access_flags :访问标记
this_class :类名引用
super_class :父类引用
interface_count :接口数量
interfaces :接口列表
fileds_count :属性数量
fileds :属性列表
methods_count :方法数量
method_info :方法信息
attribute_count :属性数量
attribute_info :属性信息
无参构造方法执行
Class文件解释器Jclasslib
Class 的加载过程包括: Loading,Linking(Verification,Perparation,Resolution),initializing
1、加载过程是通过类加载器完成的;jre内置类加载器包括Bootstarp,Ext和Application:Bootstarp 加载 jre/lib/rt.jar包中的class文件,Ext加载 jre/lib/ext路径下jar包中的class文件,Application加载classpath下的class文件;除了内置类加载器之外,用户还可以自定义类加载;遵循双亲委派原则
2、为什么要遵循双亲委派原则
2.1主要保证类加载的安全性,防止核心类被篡改
2.2同时可以提高加载效率,父加载器已经加载,则不需要再进行加载
加载不到类,抛出异常ClassNotFoundException
JMM Java内存模型
数据一致性
老的:总线锁
新的:缓存锁 + MESI
缓存行
缓存对齐:disruptor
乱序问题
CPU硬件内存屏障
Java内存屏障
运行时数据区
1、虚拟机栈
int i = 8;i = i++sout(i) // 8