本文默认基于64位的JDK 8(其虚拟机实现是HotSpot),除非特别说明。
一、方法区内部数据
方法区内有:类元数据、运行时常量池、即时编译器编译以后的代码等数据。
1.1、类元数据
类元数据,存放有:类型信息,访问修饰符,字段信息,方法信息等。
在C/C++实现层面,对应的是一个Klass对象。
1.2、运行时常量池
运行时常量池,其英文名为“Runtime Constant Pool”。
Class字节码文件中有一部分信息是常量池,其英文名为Constant Pool Table
,在运行时,它其中的内容会被载入到运行时常量池中。
二、方法区实现
JDK 6使用“永久代”实现方法区,JDK 8使用“元空间”实现方法区:实现策略升级解决一些已知存在问题,具体原因没有必要深究[3]。
参考文献
[1]http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.4
[2]http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html
[3]http://openjdk.java.net/jeps/122