这篇文章主要是记录我对JVM中7和8的一些理解误区,之前JVM的知识主要来自于《深入理解JVM虚拟机第二版》,但是其实根据JDK7来谈的,所以和当前用的最大的JDK8还是有区别的,对部分概念没有深刻的对比,这里简单记录下。
本文主要是对 方法区
和 Metaspace
进行概括!
触类旁通,博闻强识!
方法区
也就是永久代
或者PermGen Space
,这3个概念是一致的。
这篇文章前,我一直以为不是同一个东西,但是又很纳闷为什么说方法区和永久代存储的都是Class的信息,这里突然顿悟啦!
在JDK7中其主要是存放:类信息、常量池、静态信息、JIT及时编译的数据。
当类非常多的时候,可能会报错java.lang.OutOfMemoryError: PermGen*
在JDK8后,方法区被移除了,引入了新的空间Metaspace
来存放类的信息。
Metaspace
不在虚拟机中,而是使用本地内存,这样困扰我们的PermenGen
的内存就不存在了,其上限变成了物理内存,当然可以通过参数进行设置。
-XX:MetaspaceSize=8m -XX:MaxMetaspaceSize=80m
那么曾经在其中的常量池被转移到哪里了?答案是在堆中。
多读书,多看报!学会触类旁通,做到博闻强识!
您有任何建议和意见,请Email联系: hicode_club@163.com
转载请保留出处 HiCode 俱乐部