作家
登录

JVM内存分代、垃圾回收漫谈

作者: 来源: 2017-04-25 16:13:11 阅读 我要评论

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

标记-整顿算法

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

然则比拟复制算法,固然该算法占用的内存空间少,然则消费的垃圾收受接收时光会比复制算法久,所以膳绫擎也说了

  • 我们应当尽量避免或者削减 Full GC 的产生。
  • 这两种算法用精华精辟的说话描述就是
  • 复制算法:用空间换时光
  • 标记-整顿算法:用时光换空间

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

总结

它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,所有线程共享。

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

  • 为了更好的治理堆内存,该区域分为新生代和老年代。
  • 新生代产生垃圾收受接收要比老年代频繁。
  • 新生代产生的垃圾收受接收成为 Minor GC;老年代产生的 GC 成为 Full GC。
  • 为了更高效治理新生代的内存,按照复制算法,结合 IBM 的研究论证,新生代分为三块,一块比较大年夜的 Eden 区和两块比较小的 Survivor 区,比例为 8:1:1

参考

《深刻懂得 Java 虚拟机》- 周志明师长教师

一开端对象的创定都产生在新生代,跟着对象的赓续创建,如不雅新生代没有空间创建新对象,将会产生 GC ,这时的 GC 称之为 Minor GC,位于新生代的对象每经由一次 Minor GC 后,如不雅这个对象没有被收受接收,则为本身的标记数加1,这个标记数用于标识这个对象经历了若干次的 Minor GC,对于 Sun 的 Hotspot 虚拟机,如不雅这个次数跨越 15 ,该对象才会被移动到老年代。

【编辑推荐】

  1. 2017值得一瞥的JavaScript相干技巧趋势
  2. 每个Java开辟者应当知道(并爱上)的8个对象
  3. Java壅塞队列实现道理分析
  4. Java实现高斯模糊和图像的空间卷积
  5. 在Docker中运行Java:为了防止掉败,你应当知道的
【义务编辑:51CTO_OS TEL:(010)68476606】

  推荐阅读

  乌鲁木齐:未来三年数字化门诊将覆盖全市 每支疫苗每个环节都可追溯

何时打的疫苗,在哪打的疫苗,有无不良反竽暌功……往后,适龄儿童打针的每支疫苗都可以全程溯源每个环节。差别于一般门诊,数字化门诊重要承担着适龄儿童预防接种工作。2015>>>详细阅读


本文标题:JVM内存分代、垃圾回收漫谈

地址:http://www.17bianji.com/lsqh/34950.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)