永久代(Permanent Generation)和元空间(Metaspace)都是 Java 虚拟机中用于存储类信息的内存区域,但它们有一些重要的区别:
-
存储位置:永久代是在 Java 堆中的一个特殊区域,而元空间是在本地内存中的。
-
大小调整:永久代的大小是有限制的,并且必须在启动时指定,而元空间可以根据需要自动调整大小。
-
垃圾收集:永久代使用 Java 堆的垃圾收集器进行垃圾回收,而元空间使用本地内存的垃圾收集器。
-
存储内容:永久代主要存储类的信息(如类名、方法名、字段名等),而元空间存储的是类的元数据(如类的结构、方法表、字段表等)。
-
类信息的存储方式:永久代中的类信息是使用永久代专用的类加载器加载和卸载的,而元空间中的类信息是使用与应用程序类加载器相同的类加载器加载和卸载的。
需要注意的是,永久代在 JDK 8 中已经被元空间所取代,所以在 JDK 8 及以后的版本中,永久代已不存在。
永久代是在 Java 堆中的一个特殊区域,而元空间是在本地内存中的,这个本地内存是什么内存?
元空间是 Java 8 引入的一个新概念,它代替了永久代(PermGen)的概念。与永久代不同,元空间不再是 Java 堆的一部分,而是使用本地内存来存储类的元数据。
本地内存指的是操作系统分配给进程的内存空间,与 Java 堆不同,它并不受 JVM 管理,因此在内存使用上更加灵活。元空间使用本地内存存储类的元数据,可以有效地避免了永久代的一些限制,例如永久代大小有限、永久代垃圾收集效率低等问题。
需要注意的是,由于元空间使用的是本地内存,因此它的大小不再受到 Java 堆大小的限制,但是它的大小仍然会受到操作系统本身的限制,因此需要根据具体的系统配置来进行调整。