校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > java语言 > jvm内存结构
题目

以下哪个不属于JVM堆内存中的区域()?

A.survivor区

B.常量池

C.eden区

D.old区

解答

正确答案是 B

堆中的内存可以为了新生代和老年代,新生代由可以分为一个Survivor和两个Eden(From,To),默认比例8:1:1。

其实这个题有问题,从JDK7开始,常量池就从方法区中被移了到了堆(Hotspot叫做永久代),JDK8的时候,永久代被元空间代替。但是这个字符串常量池可是一直都在堆中的。

这里先说一下,方法区和永久代只是针对于HotSpot而言,在JDK7之前是一个概念,对于别的虚拟机而言,可没有什么永久代,只有方法区。

为什么HotSpot把永久代取消了呢,主要是因为这块地方的GC机制和堆邦定在一起,但是因为它不是堆,所以每一个GC收集器都需要有很大一部分代码去专门实现这个区域的垃圾,其次,每次一开始为永久代分配内存的时候,因为无法估量对象的大小,所以总是很难分配合适的内存,还容易出现OOM,所以取代成了元空间。
元空间的话相当于一个内地内存,所以基本不会出现什么OOM,但是内存泄漏还是有的。

C 1条回复 评论
招招

有没有大佬带带小白

发表于 2021-12-06 21:00:00
0 0