美文网首页
JVM垃圾回收

JVM垃圾回收

作者: lxtyp | 来源:发表于2018-08-11 16:45 被阅读0次

    判断对象是否需要回收的方法有两种:
    1.引用计数
    当某对象的引用数为0时,便可以进行垃圾收集。
    2.对象引用遍历
    果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。

    分代垃圾回收机制:不同的对象生命周期不同。把不同生命周期的对象放在不同代上,不同代上采用最合适它的垃圾回收方式进行回收。
    JVM中共划分为三个代:年轻代、年老代和持久代,
    年轻代:存放所有新生成的对象;
    年老代:在年轻代中经历了N次垃圾回收仍然存活的对象,将被放到年老代中,故都是一些生命周期较长的对象;
    持久代:用于存放静态文件,如Java类、方法等。
    新生代的垃圾收集器命名为“minor gc”,老生代的GC命名为”Full Gc 或者Major GC”.其中用System.gc()强制执行的是Full Gc.

    触发GC(Garbage Collector)的条件:
    1)GC在优先级最低的线程中运行,一般在应用程序空闲即没有应用线程在运行时被调用。
    2)Java堆内存不足时,GC会被调用。

    对象优先在新生代区中分配,若没有足够空间,Minor GC;
    大对象(需要大量连续内存空间)直接进入老年态;长期存活的对象进入老年态。如果对象在新生代出生并经过第一次MGC后仍然存活,年龄+1,若年龄超过一定限制(15),则被晋升到老年态。

    Eden和Survivor的比例分配等
    默认比例8:1。
    大部分对象都是朝生夕死。
    复制算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面。复制算法不会产生内存碎片。

    相关文章

      网友评论

          本文标题:JVM垃圾回收

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