一、概述
- 首先明确,只有HotSpot才有永久代;
BEA JRockit、IBM J9等来说,是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节,不受《JAVA虚拟机规范》约束,并不要求统一。
- HotSpot中方法区的变化
二、永久代为什么要被元空间替代?
- 为永久代设置空间大小是很难确定的。在某些场景下,如果动态加载类过多,容易产生Perm区的OOM。比如某个实际web工程中,因为功能点比较多,在运行过程中,要不断动态加载很多类,经常出现致命错误。
- 而元空间和永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存,因此,默认情况下,元空间的大小仅受本地内存限制。
- 对永久代调优是很困难的。
三、为什么垃圾回收那么难判断?