JVM 学习(脑图大纲)

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之后使用自适应的自旋锁

 


你可能感兴趣的:(JVM 学习(脑图大纲))