当前位置: 代码迷 >> J2SE >> 一个对象可以横跨储存存在eden和survivor区吗
  详细解决方案

一个对象可以横跨储存存在eden和survivor区吗

热度:21   发布时间:2016-04-23 20:41:25.0
一个对象可以横跨存储存在eden和survivor区吗
有几个JVM的问题需要大家的帮助,这里假设使用标记-整理算法进行GC
1, 如果我现在eden的大小是8M,两个survivor的大小都是1M。eden区已经使用了6M,现在要分配一个2M的对象到eden区,会触发GC吗?是minorGC还是Full GC。
2,情况跟1一样,但是现在要分配一个2.1M的对象,那么这个对象会横跨储存在eden区和一个survivor区吗?会触发GC吗,是minorGC还是Full GC。

谢谢!:)
------解决方案--------------------
JVM的gc策略及不太清楚了
不负责任的说两句

1, 如果我现在eden的大小是8M,两个survivor的大小都是1M。eden区已经使用了6M,现在要分配一个2M的对象到eden区,会触发GC吗?是minorGC还是Full GC。
应该是minorGC,不过一般JVM会有一个阀值,超过多少size的对象直接放进老年代,所以这个2M的对象也有可能不触发gc直接放进老年代,这就和eden已使用大小没太多关联了

2,情况跟1一样,但是现在要分配一个2.1M的对象,那么这个对象会横跨储存在eden区和一个survivor区吗?会触发GC吗,是minorGC还是Full GC。
对象肯定不会横跨两个区的,放不下就会gc,同样是minorGC,当然minorGC可能会触发fullGC
------解决方案--------------------
在新生代进行的都是Minor GC
1.不太清楚这种临界状态,猜测应该并不会触发GC
2.跨区是永远不可能的,这种情况先触发Minor GC,如果survivor区装不下,那么多出来的会放到老生代里,如果老生代都装不下了,才触发Major GC也就是Full GC,做完了还装不下抛内存不足异常。