驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
JVM中的方法区和Metaspace
/  

JVM中的方法区和Metaspace

这篇文章主要是记录我对JVM中7和8的一些理解误区,之前JVM的知识主要来自于《深入理解JVM虚拟机第二版》,但是其实根据JDK7来谈的,所以和当前用的最大的JDK8还是有区别的,对部分概念没有深刻的对比,这里简单记录下。

本文主要是对 方法区Metaspace进行概括!

触类旁通,博闻强识!

方法区

方法区也就是永久代或者PermGen Space,这3个概念是一致的。

这篇文章前,我一直以为不是同一个东西,但是又很纳闷为什么说方法区和永久代存储的都是Class的信息,这里突然顿悟啦!

在JDK7中其主要是存放:类信息、常量池、静态信息、JIT及时编译的数据。

当类非常多的时候,可能会报错java.lang.OutOfMemoryError: PermGen*

Metaspace

在JDK8后,方法区被移除了,引入了新的空间Metaspace来存放类的信息。

Metaspace不在虚拟机中,而是使用本地内存,这样困扰我们的PermenGen的内存就不存在了,其上限变成了物理内存,当然可以通过参数进行设置。

-XX:MetaspaceSize=8m -XX:MaxMetaspaceSize=80m 

那么曾经在其中的常量池被转移到哪里了?答案是在堆中。

总结

多读书,多看报!学会触类旁通,做到博闻强识!

您有任何建议和意见,请Email联系: hicode_club@163.com

转载请保留出处 HiCode 俱乐部

骐骥一跃,不能十步。驽马十驾,功在不舍。