如果发现需要大量连续内存空间的Java对象,如很长的字符串或者数组,则直接把对象放入老年代。
可通过 -XX:PretenureSizeThreshold
参数设置大对象的最小大小,该参数只对Serial和ParNew两款收集器有效。
**固定对象年龄判断:**默认的,存活对象在Survivor的From和To区来回交换15次后,如果对象最终还是存活,就放入老年代。可以通过 -XX:MaxTenuringThreshold
参数来设置对象的年龄。
**动态对象年龄判断:**如果发现Survivor中有相同年龄的对象空间总和大于Survivor空间的一半,那么年龄大于或者等于该年龄的对象直接晋升到老年代。
为什么需要分配担保:
如果Survivor区存活了很多对象,空间不够了,都需要晋升到老年代,那么久需要老年代进行分配担保,也就是将Survivor无法容纳的对象直接进入老年代。
JDK 6 Update 24前会根据 HandlePromotionFailure
参数判断是否允许担保失败,如果允许,则尝试一次Minor GC;否则,则进行Full GC。
本文作者: arthinking
本文链接: www.itzhai.com/jvm/java-ob…
Java对象历险记 | 分配担保,空间分配
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
更多垃圾回收机制,垃圾回收算法以及垃圾收集器相关文章,欢迎关注我的公众号:Java架构杂谈