鸿邑网站建设,计算机网络技术 网站建设方向,网站诊断网站seo诊断,html作业代码内存分配策略 文章目录 内存分配策略一、对象优先在Eden分配二、大对象直接进入老年代三、长期存活的对象将进入老年代四、动态对象年龄判定五、空间分配担保 一、对象优先在Eden分配
堆内存有新生代和老年代#xff0c;新生代中有一个Eden区和一个Survivor区(from space或者…内存分配策略 文章目录 内存分配策略一、对象优先在Eden分配二、大对象直接进入老年代三、长期存活的对象将进入老年代四、动态对象年龄判定五、空间分配担保 一、对象优先在Eden分配
堆内存有新生代和老年代新生代中有一个Eden区和一个Survivor区(from space或者to space)。当有新的对象分配时会优先分配在Eden区。当Eden区空间不足分配给新对象时会进行一次minor GC回收完没有引用的对象后先考虑把一些Eden区的对象放到Survivor区如果放不下就放到老年代中。
二、大对象直接进入老年代
大对象就是指需要连续大内存的Java对象。比如长字符串或者数量庞大的数组。HotSpot虚拟机提供了-XXPretenureSizeThreshold 参数当对象大于该指定大小就会直接进入老年代这就防止了对象在Eden区和Survivor区来回复制。
三、长期存活的对象将进入老年代
对象通常在Eden区诞生如果经过第一次Minor GC后仍然存活并能被Survivor区存储该对象就会被移到Survivor区并且Age(年龄计数器)为1。此后该对象在Survivor区每经过一次Minor GCAge就加一。当Age达到一个阈值时就把该对象放入老年代。
四、动态对象年龄判定
Hotspot虚拟机中并不一定要求对象的Age达到XXMaxTenuringThreshold设定的值才进入老年代。当Survivor区有一半以上的空间都被相同年龄的对象占据年龄大于等于该值的对象都可以进入老年代。
五、空间分配担保
在发生Minor GC之前需要检查老年代最大可用的连续空间是否大于新生代所有对象总和。如果大于则可以确保Minor GC是安全的如果不大于则需要检查XXHandlePromotionFailure参数的设置值是否允许担保失败。若允许则用老年代最大可用的连续空间与历次进入老年代的对象平均大小进行对比若大于则进行一次有风险的Minor GC反之进行full GC。若不允许担保失败则直接进行full GC。