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