虚拟机3.6 内存分配与回收策略

来源:互联网 发布:购买域名后怎么备案 编辑:程序博客网 时间:2024/05/16 06:39

对象主要分配在Eden区,如启用TLAB,将优先在TLAB分配。
3.6.1 对象优先在Eden分配
如果Eden区没有足够空间,则发起一次Minor GC.
-XX:+PrintGCDetails 可设置打印手机日志参数。
3.6.2 大对象直接进入老年代
大对象:很长的字符串或数组。尽量避免大对象和短命大对象
-XX:PretenureSizeThreshold参数 设置 多大的对象直接分配在老年代。避免Eden区和两个Survivor区频繁复制(新生代采取整理-复制收集内存)。
3.6.3长期存活的对象进入老年代
每个对象有一个age计数器,每经过一次Minior GC ,age+1,默认15岁进入老年代。晋升岁数设置参数:+XX:MaxTenuringThreshold.
3.6.4 动态对象年龄判定
如果Survivor空间中,相同年龄对象占该空间超过一半,则所有≥这大部分对象年龄的将进入直接老年代.
3.6.5 空间分配担保
jdk6及之前:有担保一说
在Minior GC前,虚拟机需要检查老年代最大可用连续空间是否大于新生代所有对象总空间,如果大于,则OK,否则需要看HandlePromotionFailure设置值是否允许担保失败。如果不担保,则进行full gc,如担保,则check if(当前老年代空间>根据历次晋升到老年代对象的平均大小), then Minior GC。
在jdk7往后,空间分配担保一定是有的。

原创粉丝点击