9.方法区

在jdk7及之前,习惯上把方法区称为永久代,jdk8之后,使用元空间取代了永久代。

本质上,方法区和永久代并不等价。

元空间的本质与永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代最大的区别在于:元空间不在虚拟机设置的内存中,而是使用本地内存

永久代元空间二者不只是名字变了,内存结构也调整了。

JDK7: OOM(PermGen space)

JDK8 : OOM(Metaspace)

  • -XX:MetaspaceSize=10m
  • -XX:MaxMetaspaceSize=10m

9.方法区

方法区存储什么?

用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等。
9.方法区

运行时常量池 VS 常量池

  • 方法区,内部包含了运行时常量池。
  • 字节码文件,内部包含了常量池。
  • 要弄清楚方法区,需要理解清楚ClassFile,因为加载类的信息都在方法区。
  • 要弄清楚方法区的运行时常量池,需要理解清楚ClassFile中的常量池。

9.方法区

9.方法区

9.方法区9.方法区