参考
总结
“方法区(Method Area)”是JVM规范中的概念,不同的Java版本有不同的实现。方法区为所有线程共享。主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与堆进行区分,通常又叫“非堆”。
Java6中的“方法区”实现与规范相同,称“永久代(Permanent Generation)”,Java7中“方法区”也称为“永久代(Permanent Generation)”但是“方法区”中的“常量池”移动到了“堆”中(因此String.intern()方法在Java6和7有区别),Java8中“方法区”称为“元空间(Meta Space)”并且不在虚拟机中而在本地内存中(JVM参数也不同)