View on GitHub

heartCraft.github.io

一朵野花,随风摆荡

JVM

JVM内存结构

​ 下图中标注颜色的区域只是JVM规范中定义的逻辑区域,虚拟机实现的实际物理区域与逻辑区域并不完全对应。

​ 除以上区域外,还存在不由JVM管理的,本地方法库直接在堆外申请的内存区域,也叫直接内存

JVM内存结构

Java内存模型(Java Memory Model,JMM)

​ 定义了共享内存系统中当多线程读写数据的规范,保证共享内存的正确性(可见性,原子性,有序性)。

​ JMM中所有变量存储在主存中,每条线程的工作内存中保存了该线程中需要用到的变量在主寸中的拷贝。线程只能操作自己工作内存中的数据,不能直接读写主存,不同线程间工作内存也不能相互访问,线程间数据的传递需要工作内存与主存之间进行数据同步。

JMM

​ JMM除了定义以上描述的规范外,还提供了一系列封装了底层实现的关键字,如volatile,synchronized,final,concurren包等。

Java对象模型(Java对象自身的存储模型)

​ HotSpot虚拟机中,设计了一个OOP-Klass Model。OOP(Ordinary Object Pointer)指的是普通对象指针,而Klass用来描述对象实例的具体类型。

HotSpot OOP-Klasss Model Java对象模型

常量池

https://blog.csdn.net/qq_26222859/article/details/73135660

如何判断对象已死需要回收?

​ 根搜索算法(可达性分析算法)

​ 引用计数法(会存在循环引用问题,不适用)

垃圾回收算法

​ 标记-清除算法

​ 复制算法

​ 标记-整理算法

​ 分代收集算法

垃圾回收器

垃圾回收器 使用场景
serial+serial old client 模式
parNew + CMS + serial old service模式
parallel Scanvange + parallel old 提高吞吐量,对响应
G1 对CMS的upgrade

TODO

G1算法的具体实现&调优参数

JVM故障定位与性能分析:heap dump与thread dump