码迷,mamicode.com
首页 > 编程语言 > 详细

关于Java内存机制的两个问题

时间:2015-10-29 22:01:34      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

问题1.

java堆内存的年轻代中,
情况: 如果发生Minor GC之后,To Survivor区的空间不足以容纳来自Eden和From Survivor的存活对象,
背景:而这个时候既没有年龄达到MaxTenuringThreshold的对象,也没有发生相同年龄对象的大小总和超过Survivor空间的一半的情况
问题:java虚拟机会怎么处理这种情况?按理说应该是将一部分对象移入年老代,那么问题是会移动多少对象进入年老代?


问题2. 

书中有说:java堆内存中,如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,那么年龄大于或等于该年龄的对象就可以直接进入年老代,无须等到MaxTenuringThreshold中要求的年龄。
问题是:每次Minor GC,都会使Survivor中的对象的年龄加1,而来自Eden去的对象的年龄应该都是1,这样的话,从一个From Survivor区来的对象永远不会有相同年龄对象的大小总和大于Survivor空间的一半的情况发生,而能发生这种情况只能是来自于Eden的对象(它们的年龄为1)那么如果某次来自Eden区的所有对象之和大于Survivor空间的一半时,会导致来自Eden和From Survivor的对象都进入来年老代!!!感觉很不合理,所以我想知道我的理解哪里有问题?


请帮忙解答一下疑惑?

关于Java内存机制的两个问题

标签:

原文地址:http://my.oschina.net/lovewxm/blog/523745

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!