JVM剖析
1 class
1.1 constantpool
1.1.1 classfields
1.1.2 methods
1.1.3 constant
1.2 Operandstack
1.3
2 data
2.1 heap
3 对象
3.1 对象创建过程
3.1.1 对分配内存空间的动作进行同步处理
3.1.2 内存分配的动作按照线程划分在不同的空间之中进行
参数:-XX:+/-UseTLAB
3.2 对象的内存布局
3.2.1 对象头(Header)
3.2.2 实例数据(Instance Data)
3.2.3 对齐填充(Padding)
3.3 对象的访问
3.3.1 句柄访问
因GC,对象实例数据位置变更,只需要更改句柄池,不需要更改java 栈
3.3.2 直接指针访问
访问速度快
Sun HotSpot VM使用直接指针访问方式
3.3.3 reference的级别
强引用
ex: Object obj = new Object();
软引用
系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收
实现:SoftReference类
弱引用
弱引用关联的对象只能生存到下一次垃圾收集发生之前
实现:WeakReference类
虚引用
唯一目的就是能在这个对象被收集器回收时收到一个系统通知
实现:PhantomReference
4 GC
4.1 GC算法
4.1.1 对象引用是否可回收判定
可达性分析(Reachability Analysis)Hotspot
引用计数法(VM未使用)
4.1.2 垃圾回收算法
标记-清除算法
效率不高
碎片过多
复制算法
内存减半
标记-整理算法
分代收集算法
4.1.3 垃圾搜集器
常用参数
4.1.4 对象分配
PretenureSizeThreshold 对象大于此值则直接放入老生带
只对Serial和ParNew两款收集器有效
晋升老年代的年龄阈值,可以通过参数-XX:MaxTenuringThreshold
4.2
5 class类文件结构
5.1 class类文件结构
5.1.1 无符号数
u1,u2,u4,u8
5.1.2 表
5.1.3 通过javap -v 查看class详细信息。
5.1.4
6 java重要的关键字
6.1 volatile
6.1.1 保证此变量对所有线程的可见性,但不保证并发安全
6.1.2 禁止指令重排序优化,按照代码顺序执行。
7 并发锁控制
7.1 自旋锁
7.1.1 -XX:+UseSpinning 开启自旋锁。1.6之后默认启用。
7.1.2 -XX:PreBlockSpin 自旋次数。1.6之后使用自适应的自旋锁