您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    JVM内存分代、垃圾回收漫谈(2)
    时间:2017-04-25 15:31 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    但是,如果使用复制算法的内存区域有大量的存活对象时,复制算法就会变得捉襟见肘,这时需要更大的 Survivor 区用于盛放那些存活对象,甚至可能需要 1:1的比例。所以针对堆内存区域的老年代,就有了下面的算法。

    标记-整理算法

    标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是 让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存 。这种方法避免了碎片的产生,同时也不需要一块额外的内存空间,对于老年代会比较合适。

    但是相比复制算法,虽然该算法占用的内存空间少,但是耗费的垃圾回收时间会比复制算法久,所以上面也说了

    我们应该尽量避免或者减少 Full GC 的发生。

    这两种算法用精炼的语言描述就是

    复制算法:用空间换时间

    标记-整理算法:用时间换空间

    一句话 鱼与熊掌不可兼得,但是针对新生代和老年代,他们都是最佳的选择。

    总结

    简单梳理一下文中讲到的一些知识点

    为了更好的管理堆内存,该区域分为新生代和老年代。

    新生代发生垃圾回收要比老年代频繁。

    新生代发生的垃圾回收成为 Minor GC;老年代发生的 GC 成为 Full GC。

    为了更高效管理新生代的内存,按照复制算法,结合 IBM 的研究论证,新生代分为三块,一块比较大的 Eden 区和两块比较小的 Survivor 区,比例为 8:1:1

    参考

    《深入理解 Java 虚拟机》- 周志明老师

    【编辑推荐】

    2017值得一瞥的JavaScript相关技术趋势

    每个Java开发者应该知道(并爱上)的8个工具

    Java阻塞队列实现原理分析

    Java实现高斯模糊和图像的空间卷积

    在Docker中运行Java:为了防止失败,你应该知道的

    (责任编辑:admin)