然则,如不雅应用复制算法的内存区域有大年夜量的存活对象时,复制算法就会变得捉襟见肘,这时须要更大年夜的 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 ,该对象才会被移动到老年代。
【编辑推荐】
- 2017值得一瞥的JavaScript相干技巧趋势
- 每个Java开辟者应当知道(并爱上)的8个对象
- Java壅塞队列实现道理分析
- Java实现高斯模糊和图像的空间卷积
- 在Docker中运行Java:为了防止掉败,你应当知道的
推荐阅读
乌鲁木齐:未来三年数字化门诊将覆盖全市 每支疫苗每个环节都可追溯
何时打的疫苗,在哪打的疫苗,有无不良反竽暌功……往后,适龄儿童打针的每支疫苗都可以全程溯源每个环节。差别于一般门诊,数字化门诊重要承担着适龄儿童预防接种工作。2015>>>详细阅读
本文标题:JVM内存分代、垃圾回收漫谈
地址:http://www.17bianji.com/lsqh/34950.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示