上图为JVM运行时数据区。
1、方法区:(逻辑上)
- 是JVM的一个规范,所有虚拟机必须要遵守的。
- 是JVM所有线程共享的,主要用于存储类的信息、常量池、方法数据、方法代码等。
- 方法区逻辑上属于堆的一部分(下文会有提及),但是为了与堆区分,通常又叫非堆(Heap)区
2、堆
- 堆是JVM中线程共享的,在虚拟机启动的时候就已创建。
- 所有对象(对象本身)和数据都在堆中存放,也是GC的主要区域
3、PermGen(永久代)
PermGen
, 就是PermGen space
,全称是Permanent Generation space
,是指内存的永久保存区域。- PermGen space 是JDK7及之前, HotSpot虚拟机基于JVM规范对方法区的一个落地实现。在JDK8被移除。