美文网首页
Java GC(垃圾回收机制)

Java GC(垃圾回收机制)

作者: 海在路上 | 来源:发表于2017-11-24 00:01 被阅读19次

    概述:

    当JVM执行垃圾回收的时候,除了GC线程意外所有的线程都会处于等待状态,因此此时的程序处于停止状态(stop-the-world)。
    因此System.gc()这个方法的调用会严重影响应用的性能,

    按代的垃圾回收机制

    1. 在Java程序中不能显示地分配和注销内存,因此对象设置为null并不能显示清理内存。
    2. 绝大多数最新被创建的对象被分配到这里,
    3. 三个类型的内存:
    • 新生代:绝大多数最新被创建的对象会被分配到这里,由于大部分对象在创建后会变得不可达,
    • 老年代:在新生代存活下来的对象,然后被拷贝到这里。
    • 永久代:老年代存活下来的对象。
    年代图示

    老年代:

    1. card table:老年代的对象指向新生代对象的引用都会被记录在这个表中。

    新生代:

    1. 新生待的三个空间:
    • 一个伊旬园空间(Eden)
    • 两个幸存者空间(Survivor)
    1. 三个空间的特点:
      1> 绝大多数刚刚被创建的对象会存放在伊旬园空间。
      2> 在伊旬园空间执行了第一次GC之后,存活的对象被移动到其中一个幸存者空间。
      3> 此后在伊旬园空间执行GC之后,存活的对象会被堆积在同一个幸存者空间。
      4> 当一个幸存者空间饱和,还在存活的对象会被移动到另一个幸存者空间。之后会清空已经饱和的那个幸存者空间。
      5> 以上步骤重复几次依然存活的对象,就会被移动到老年代。

    参考文章
    参考文章2

    相关文章

      网友评论

          本文标题:Java GC(垃圾回收机制)

          本文链接:https://www.haomeiwen.com/subject/txvtbxtx.html