JVM内存结构
2021-07-20 13:32:14 0 举报
JVM内存结构相关图解
作者其他创作
大纲/内容
Serial
所有线程共享的数据区域
Old
To1
本地库接口
准备
本地方法栈Native Method Stack
Serial Old(MSC)
Full GC
垃圾回收器
链接阶段
Parallel Old
Shenandoah GC
From1
堆(Heap)
Eden(8)
应用程序类加载器(系统类加载器)
由各自线程隔离的数据区域
运行时数据区
Young(新生代)
验证
GI
CMS
类加载器子系统
ZGC
JDK版本更新整理:https://blog.csdn.net/lc11535/article/details/99776597
Young
加载阶段
执行引擎
Parallel Scavenge
新生代(1/3)堆空间
MinorGC
启动类加载器(引导类加载器)
字节码文件
方法区Method Area
初始化阶段
本地方法
老生代(2/3)堆空间
堆Heap
类加载器:如果收到一个加载器接收到加载类请求,先把这个类委派给父类加载器,每个类都是如此,只有当父类在自己的搜索范围内找不到这个类时,将会把这个请求交给子类。双亲委派模型机制:防止篡改核心类代码;可见性原则:子类加载器可以读取到父类的类加载器加载进来的class唯一性原则:类是唯一的,同一路径下没有相同的类
MajorGC
程序计数器Program Counter Register
ParNew
虚拟机栈VM Stack
Serial:单线程,复制算法,工作于新生代;在进行垃圾回收时,必须暂停其他所有的工作线程,直到垃圾收集结束。ParNew:多线程,复制算法,工作于新生代,是Serial的多线程版本。垃圾收集过程中同样也暂停所有其他工作线程。Parallel Scavenge:多线程,复制算法,高效,工作于新生代;它主要关注吞吐量;主要适用于后台运算而不需要太多交互的任务。Serial Old:单线程,标识整理算法,工作于老年代。Parallel Old:多线程,标记整理算法,工作于老年代。CMS:多线程,以实现获得最短回收停顿时间为目标,标记清除算法。缩短垃圾收集时间可以为交互较高的程序提高用户体验。G1:标记整理算法,分区排列,实现无内存碎片,可以精准控制停顿时间,在不牺牲吞吐量前提下实现低停顿垃圾回收。(JDK9,设置成默认GC)ZGC:不设分代,以低延迟为目标。(JDK11提出,使用Pauseless GC算法实现)https://runnable.run/zgcShenandoah GC:不设分代,目标是99.9% 的暂停小于 10ms,暂停与堆大小无关。实现无内存碎片(JDK12提出)https://www.cnblogs.com/androidsuperman/p/11704968.html
扩展类加载器
Old(老年代)
老年代主要存放应用程序中生命周期长的对象。老年代的对象比较稳定,所以MajorGC不会频繁执行。MajorGC采用标记清除算法。Full GC:收集整个Java堆和方法区的垃圾收集
初始化
解析
哪些内存需要回收?即GC 发生的内存区域?如何判断这个对象需要回收?即GC 的存活标准?https://zhuanlan.zhihu.com/p/111016492
收藏
0 条评论
下一页