JVM GC 垃圾收集梳理总结
1. 什么是 JVM GC 垃圾收集
JVM(Java Virtual Machine)是Java虚拟机的缩写,它是Java程序运行的环境。在Java程序运行过程中,会产生一些不再被使用的对象,这些对象占用内存空间,如果不及时清理,会导致内存泄漏和程序性能下降。JVM的垃圾收集(Garbage Collection)机制就是用来自动回收这些不再使用的对象所占用的内存空间。
2. JVM GC 垃圾收集的过程
JVM GC 垃圾收集的过程可以分为以下几个步骤:
2.1 标记阶段(Marking Phase)
在标记阶段,垃圾收集器会从根对象(如线程栈、静态变量等)开始,递归地遍历所有可达对象,并标记它们为活动对象。未被标记的对象则被认为是垃圾对象。
2.2 清除阶段(Sweeping Phase)
在清除阶段,垃圾收集器会清除所有被标记为垃圾对象的内存空间。这些内存空间将被重新标记为可用空间,以供后续的对象分配使用。
2.3 压缩阶段(Compacting Phase)
在压缩阶段,垃圾收集器会对内存空间进行整理和压缩,以减少内存碎片化。这样可以提高内存的利用率,并提升程序的性能。
2.4 并发阶段(Concurrent Phase)
在并发阶段,垃圾收集器会与应用程序并发执行,以减少垃圾收集对应用程序的影响。在这个阶段,垃圾收集器会继续标记和清除垃圾对象,同时应用程序也在继续运行。
3. JVM GC 垃圾收集的示例说明
3.1 示例一:Serial GC
Serial GC 是一种单线程的垃圾收集器,它在进行垃圾收集时会暂停应用程序的执行。下面是 Serial GC 的垃圾收集过程:
- 标记阶段:从根对象开始,递归地标记所有可达对象。
- 清除阶段:清除所有被标记为垃圾对象的内存空间。
- 压缩阶段:对内存空间进行整理和压缩。
- 并发阶段:暂停应用程序的执行,继续标记和清除垃圾对象。
3.2 示例二:G1 GC
G1 GC 是一种面向服务端应用的垃圾收集器,它采用了分代收集和并发标记清除的策略。下面是 G1 GC 的垃圾收集过程:
- 初始标记阶段:标记从根对象直接可达的对象。
- 并发标记阶段:与应用程序并发执行,标记所有可达对象。
- 最终标记阶段:暂停应用程序的执行,完成标记所有可达对象。
- 筛选阶段:根据各个区域的回收价值,选择回收最有价值的区域进行垃圾收集。
- 清理阶段:清除被标记为垃圾的对象。
- 压缩阶段:对内存空间进行整理和压缩。
以上是 JVM GC 垃圾收集的梳理总结,不同的垃圾收集器有不同的实现方式和策略,可以根据具体的应用场景选择合适的垃圾收集器来提高程序的性能和内存利用率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JVM GC 垃圾收集梳理总结 - Python技术站