站长之家0,个人怎样建网站赚钱,信用中国企业查询,资阳网站建设方案3.8 实战#xff1a;内存分配与回收策略
3.8.1 对象优先在Eden分配
大多数情况下#xff0c;对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时#xff0c;虚拟机将发起一次Minor GC。
3.8.2 大对象直接进入老年代
HotSpot虚拟机提供了-XX#xff1a;Prete… 3.8 实战内存分配与回收策略
3.8.1 对象优先在Eden分配
大多数情况下对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时虚拟机将发起一次Minor GC。
3.8.2 大对象直接进入老年代
HotSpot虚拟机提供了-XXPretenureSizeThreshold参数指定大于该设置值的对象直接在老年代分配这样做的目的就是避免在Eden区及两个Survivor区之间来回复制产生大量的内存复制操作。 [Ref] -XX:PretenureSizeThreshold [QA] 什么是大对象 大对象就是指需要大量连续内存空间的Java对象最典型的大对象便是那种很长的字符串或者元素数量很庞大的数组 3.8.3 长期存活的对象将进入老年代
虚拟机给每个对象定义了一个对象年龄Age计数器存储在对象头中。对象通常在Eden区里诞生如果经过第一次Minor GC后仍然存活并且能被Survivor容纳的话该对象会被移动到Survivor空间中并且将其对象年龄设为1岁。对象在Survivor区中每熬过一次Minor GC年龄就增加1岁当它的年龄增加到一定程度默认为15就会被晋升到老年代中。对象晋升老年代的年龄阈值可以通过参数-XXMaxTenuringThreshold设置。 [Ref] -XX:MaxTenuringThresholdXX:PrintTenuringDistribution
3.8.4 动态对象年龄判定
-XX:TargetSurvivorRatio Survivor 区中相同年龄的所有对象的空间总和大于 Survivor 区空间的一半则年龄大于或等于该年龄的对象直接进入老年代。
3.8.5 空间分配担保
在发生 Minor GC 之前虚拟机会先检查老年代最大可用的连续空间 只要老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小就会进行 Minor GC否则将进行 Full GC。
-----------------------------------------------------------------------------读书笔记摘自 书名深入理解Java虚拟机JVM高级特性与最佳实践第3版作者周志明