首页 > 试题广场 >

Java中内存模型中,Metaspace(即元空间,也叫方法

[不定项选择题]
Java中内存模型中,Metaspace(即元空间,也叫方法区)是从哪个版本开始引入的?
  • Java 6
  • Java 7
  • Java 8
  • Java 9

Java 8彻底将永久代移除出了HotSpot JVM,将其原有的数据迁移至Java HeapMetaspace

    HotSpot JVM中,永久代中用于存放类和方法的元数据以及常量池,在Java中对应能通过反射获取到的数据,比如ClassMethod。每当一个类初次被加载的时候,它的元数据都会放到永久代中。

永久代是有大小限制的,因此如果加载的类太多,很有可能导致永久代内存溢出,即 java.lang.OutOfMemoryError: PermGen 。为此我们不得不对虚拟机做调优

Java 8中永久代被移出HotSpot JVM的原因主要有两个:

 

1、由于Permanent Generation内存经常不够用或发生内存泄露,引发java.lang.OutOfMemoryError: PermGen (在Java Web开发中非常常见)。

2、移除Permanent Generation可以促进HotSpot JVMJRockit VM的融合,因为JRockit没有永久代。

根据上面的各种原因,永久代最终被移除,方法区移至Metaspace,字符串常量移至Java Heap
发表于 2018-08-15 18:32:12 回复(0)
JDK1.7之前运行时常量池逻辑包含字符串常量池,存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代;
JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代 ;
JDK1.8 hotspot移除了永久代用元空间(Metaspace)取而代之, 这时候字符串常量池还在堆, 运行时常量池还在方法区, 只不过方法区的实现从永久代变成了元空间(Metaspace)。
发表于 2021-01-02 19:31:09 回复(0)