自学内容网 自学内容网

JVM中的垃圾回收机制

垃圾回收机制

JVM 垃圾回收机制--GC(Garbage Collection) 是 Java 虚拟机自动管理内存的一种方式,旨在回收不再使用的对象,以释放内存空间。以下是 JVM 垃圾回收机制的主要特点和工作原理:

一. 垃圾回收的基本概念

  • 垃圾对象:指没有任何引用指向的对象,这些对象无法再被程序访问。
  • 内存管理:JVM 自动管理内存的分配和释放,程序员无需手动释放内存。

二. 垃圾回收的工作原理

JVM 的垃圾回收通常通过以下几个步骤进行:

  • 标记:首先,JVM 会从根对象(如栈中的局部变量、静态变量等)开始,遍历所有可达对象,并标记这些对象为“活着”的对象。
  • 清除:在标记阶段结束后,JVM 会清除未被标记的对象,释放其占用的内存。
  • 整理(可选):在某些垃圾回收算法中,清除后会进行内存整理,将存活的对象移动到一起,以减少内存碎片。

三. 垃圾回收器

JVM 提供了多种垃圾回收器,常见的包括:

  • Serial GC:单线程的垃圾回收器,适用于小型应用。
  • Parallel GC:多线程的垃圾回收器,提高了垃圾回收的效率。
  • CMS(Concurrent Mark-Sweep):并发标记清除垃圾回收器,减少停顿时间。
  • G1(Garbage-First):能够同时进行垃圾回收和应用程序的执行,适用于大内存应用。

四. 垃圾回收的触发

垃圾回收通常在情况下触发:

  • 当堆内存达到一定阈值时。
  • 当系统内存不足时。
  • 手动调用 System.gc()(建议不使用,因为并不能保证立即回收)。

通过垃圾回收机制,JVM 可以有效地管理内存,减少内存泄漏和溢出的问题,提高程序的稳定性和性能 

五. 垃圾回收算法

1. 标记-清除算法

  • 过程
    • 标记阶段:从根对象开始,遍历所有可达对象,并标记它们。
    • 清除阶段:遍历堆内存,清除未被标记的对象,释放其占用的内存。
  • 优点
    • 实现简单,直观。
  • 缺点
    • 清除阶段可能导致内存碎片,导致后续内存分配效率降低。

2. 复制算法

  • 过程
    • 将内存分为两块区域(通常是等大小的),每次只使用其中一块。
    • 当一块区域用满时,将存活的对象复制到另一块区域,然后清空当前区域。
  • 优点
    • 内存分配简单且连续,避免了内存碎片。
    • 适合短生命周期的对象,效率较高。
  • 缺点
    • 只使用一半的内存,内存利用率较低。

3. 标记-整理算法

  • 过程
    • 标记阶段:与标记-清除算法相同,标记所有可达对象。
    • 整理阶段:将存活对象移动到内存的一端,清除未存活对象的内存。
  • 优点
    • 避免了内存碎片,内存使用更高效。
  • 缺点
    • 实现复杂,移动对象可能会导致额外的性能开销。

4. 分代收集算法

  • 过程
    • 将堆内存分为多个区域,通常分为年轻代(Young Generation)、老年代(Old Generation)和持久代(Permanent Generation)。
    • 年轻代中的对象大多是短生命周期的,使用复制算法进行垃圾回收;老年代中的对象通常是长生命周期的,使用标记-清除或标记-整理算法。
  • 优点
    • 结合了不同算法的优点,能够提高回收效率。
    • 由于年轻代中的对象大多短命,回收频繁,减少了老年代的垃圾回收次数。
  • 缺点
    • 实现复杂,需要管理多个内存区域。

 


原文地址:https://blog.csdn.net/2301_79814793/article/details/143506862

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!