Java:Java中垃圾收集的阶段

  垃圾收集器使用垃圾收集根(GC根)的概念来识别活的和死的对象。

  此类垃圾收集根的示例包括:

  l 由系统类装入器(非自定义类装入器)装入的类

  l 实时线程

  l 当前执行方法的局部变量和参数

  l JNI方法的局部变量和参数

  l 全球JNI参考

  l 用作同步监视器的对象

  l JVM出于垃圾收集目的而保留的对象

  垃圾收集器遍历内存中的整个对象图,从那些垃圾收集根开始,并遵循从根到其他对象的引用。

  

Java:Java中垃圾收集的阶段_第1张图片

 

  标准垃圾收集实施包括三个阶段:

  1.将对象标记为活动

  在这一步中,GC通过遍历对象图来识别内存中的所有活动对象。

  当GC访问一个对象时,它将其标记为可访问的,因此是活动的。垃圾收集器访问的每个对象都标记为活动。所有不能从GC根访问的对象都是垃圾,并被视为垃圾收集的候选对象。

  2.扫描死对象

  在标记阶段之后,内存空间被活动(已访问)和死亡(未访问)对象占用。扫描阶段释放包含这些死对象的内存碎片。

  3.压缩内存中的剩余对象

  扫描阶段移除的固定对象不一定相邻。因此,最终可能会有零碎的内存空间。

  在垃圾收集器删除死对象后,可以压缩内存,以便剩余的对象位于堆开始处的连续块中。

  压缩过程使按顺序为新对象分配内存变得更容易。

你可能感兴趣的:(JAVA,java,Java语言,Java开发,Java培训,Java学习)