深入理解Java虚拟机
2024-03-08 21:11:48 0 举报
AI智能生成
"深入理解Java虚拟机"是一本由周志明撰写的关于Java虚拟机(JVM)的权威书籍。Java虚拟机是Java语言的运行基础,它提供了运行时环境,使Java程序能够在各种操作系统和硬件平台上运行。这本书详细解释了Java虚拟机的各个组成部分,如类加载器、运行时数据区、执行引擎、垃圾收集器等,以及它们的工作原理。同时,它还探讨了Java虚拟机的优化和故障排除技巧,以及如何利用Java虚拟机的特性来提高程序的性能和可靠性。无论你是Java程序员、系统管理员还是Java虚拟机的研究者,这本书都可以帮助你更深入地理解Java虚拟机的工作原理和应用。
作者其他创作
大纲/内容
程序计数器
java虚拟机栈
本地方法栈
堆
运行时常量池
方法区或者元空间
Runtime data area(运行时数据区域)
Class loader(类装载)
即时编译器
gc
Execution engine(执行引擎)
Native Interface(本地接口)
直接内存
博客
主要组成部分
创建的方式
创建流程
指针碰撞
空闲列表
为对象分配内存
同步处理
处理并发安全问题
指针
句柄
对象的访问定位
Mark Word
类型指针
对象头(Header)
实例数据(Instance Data)
和对齐填充(Padding)
对象的内存布局
对象创建
引用计数法
GC Roots
可达性分析法
分析过程
三色标记(Tricolor Marking)
并发的可达性分析
对象可回收?
强引用(Strongly Re-ference)
软引用(Soft Reference)
弱引用(Weak Reference)
虚引用(Phantom Reference)
引用
弱分代假说(Weak Generational Hypothesis)
强分代假说(Strong Generational Hypothesis)
分代收集理论
标记阶段:标记出可以回收的对象。
清除阶段:回收被标记的对象所占用的空间。
方式
第一个是执行效率不稳定,如果Java堆中包含大量对象,而且其中大部分是需要被回收的,这时必须进行大量标记和清除的动作,导致标记和清除两个过程的执行效率都随对象数量增长而降低;
第二个是内存空间的碎片化问题,标记、清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致当以后在程序运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。
缺点
实现简单,不需要对对象进行移动
优点
标记-清除算法(Mark-Sweep)
优点:按顺序分配内存即可,实现简单、运行高效,不用考虑内存碎片。
缺点:可用的内存大小缩小为原来的一半,对象存活率高时会频繁进行复制。
标记-复制算法
优点:解决了标记-清理算法存在的内存碎片问题。
缺点:仍需要进行局部对象移动,一定程度上降低了效率。
标记-整理算法
分代收集法是目前大部分 JVM 所采用的方法,其核心思想是根据对象存活的不同生命周期将内存划分为不同的域,一般情况下将 GC 堆划分为老生代(Tenured/Old Generation)和新生代(YoungGeneration)。老生代的特点是每次垃圾回收时只有少量对象需要被回收,新生代的特点是每次垃圾回收时都有大量垃圾需要被回收,因此可以根据不同区域选择不同的算法。
分代收集算法
垃圾收集算法
根节点枚举
安全点
安全区域
记忆集(Remembered Set)
HotSpot的算法细节实现
Serial 收集器
Serial Old 收集器
ParNew 收集器
Parallel Scavenge 收集器
Parallel Old 收集器
G1收集器
垃圾回收器
垃圾收集器与内存分配策略
深入理解Java虚拟机
收藏
0 条评论
回复 删除
下一页