关于JavaGC的问题,求大神解答

JavaGC中,Eden区不够的时候,会发生Minor GC,在发生Minor GC时,Eden区和Survival from区会把一些仍然存活的对象复制进Survival to区,并清除内存。
问题: 
有没有这种可能,发生Minor GC时,作为存活对象存储的那个Survival区不足以存储这些存活对象?
如果有,会发生什么?
#Java工程师#
全部评论
放进老年代
点赞 回复 分享
发布于 2017-03-07 00:31
如果survivor区空间不足的话,就需要老年代进行分配担保,将这些对象提前移入老年代中
点赞 回复 分享
发布于 2017-03-07 00:36
答案找到啦:《深入理解Java虚拟机 JVM高级特性与最佳实践》P71 当Survivor空间不够时,需要依赖其他内存(这里指老年代)进行分配担保(Handle Promotion),如果Survivor空间不够,则直接通过分配担保机制进入老年代。
点赞 回复 分享
发布于 2017-03-07 00:38
《深入分析Java web技术内幕》 p216 也有说明
点赞 回复 分享
发布于 2017-03-07 08:17
当Eden区满后会将对象存放到survivor区中,如果survivor区仍然存不下这些对象,gc收集器会将这些对象直接存放到old区。如果在survivor区中的对象足够老,也直接存放到old区,如果old区也满了,将会触发full gc,回收整个堆内存。
点赞 回复 分享
发布于 2017-03-07 08:22
分配担保机制,存放到old区
点赞 回复 分享
发布于 2017-03-07 11:36

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务