PermGen(永久代)性能
- JVM 规范的一种实现
- 只有 HotSpot 才有 “PermGen space”,
- 方法区:是JVM的一种规范,存放类信息、常量、静态变量、即时编译器编译后的代码等;
- 永久代:是HotSpot的一种具体实现,实际指的就是方法区,
元空间(Metaspace)spa
- 本质和永久代相似,都是对JVM规范中方法区的实现。
- 不过元空间与永久代之间最大的区别在于:
- 元空间并不在虚拟机中,而是使用本地内存。
- 所以,默认状况下,元空间的大小仅受本地内存限制,
- 但能够经过如下参数来指定元空间的大小:
- -XX:MetaspaceSize,初始空间大小,
- -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
- -XX:MinMetaspaceFreeRatio,在GC以后,最小的Metaspace剩余空间容量的百分比
- -XX:MaxMetaspaceFreeRatio,在GC以后,最大的Metaspace剩余空间容量的百分比
JDK 8 中永久代向元空间的转换,几点缘由:内存
一、字符串存在永久代中,容易出现性能问题和内存溢出。字符串
二、类及方法的信息等比较难肯定其大小,编译器
- 所以对于永久代的大小指定比较困难,
- 过小容易出现永久代溢出,
- 太大则容易致使老年代溢出。
三、永久代会为 GC 带来没必要要的复杂度,而且回收效率偏低。虚拟机
四、Oracle 可能会将HotSpot 与 JRockit 合二为一。it