8 下列关于堆内存管理描述错误的是:( )
A、堆内存分为年轻代、老年代、持久代,持久代内存溢出为OutOfMemoryError: Java heap space
B、当Eden区满,再创建对象,会触发年轻代GC,不能回收的对象会放到To Survivor区
C、年轻代的To Survivor满了或里面的对象足够Old(超过XX:MaxTenuringThreshold),则这些对象被copy到老年代
D、当Old区被放满的之后,进行Full GC,Full GC后,若Survivor及old区仍然无法存放从Eden复制过来的部分对象,则出现OOM错误
正确答案: A
解析:
内存申请过程
JVM会试图为相关Java对象在Eden中初始化一块内存区域;
当Eden空间足够时,内存申请结束。否则到下一步;
JVM试图释放在Eden中所有不活跃的对象(minor collection),释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区;
Survivor区被用来作为Eden及old的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区;
当old区空间不够时,JVM会在old区进行major collection;
完全垃圾收集后,若Survivor及old区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现"Out of memory错误"。
本文深入探讨了Java堆内存管理机制,包括年轻代、老年代、持久代的划分及其作用,详细解析了对象如何在各区域间迁移,以及不同类型的垃圾回收机制如何避免内存溢出等问题。
A卷--8&spm=1001.2101.3001.5002&articleId=77949158&d=1&t=3&u=576725409c5644579acc4d935e9d339c)
1065

被折叠的 条评论
为什么被折叠?



