美文网首页
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