JVM学习笔记第27天-方法区的演进细节

一、概述

  • 首先明确,只有HotSpot才有永久代;

BEA JRockit、IBM J9等来说,是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节,不受《JAVA虚拟机规范》约束,并不要求统一。

  • HotSpot中方法区的变化

JVM学习笔记第27天-方法区的演进细节JVM学习笔记第27天-方法区的演进细节

JVM学习笔记第27天-方法区的演进细节

JVM学习笔记第27天-方法区的演进细节

二、永久代为什么要被元空间替代?

  1. 为永久代设置空间大小是很难确定的。在某些场景下,如果动态加载类过多,容易产生Perm区的OOM。比如某个实际web工程中,因为功能点比较多,在运行过程中,要不断动态加载很多类,经常出现致命错误。JVM学习笔记第27天-方法区的演进细节
  2. 而元空间和永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存,因此,默认情况下,元空间的大小仅受本地内存限制。
  3. 对永久代调优是很困难的。

三、为什么垃圾回收那么难判断?

JVM学习笔记第27天-方法区的演进细节

JVM学习笔记第27天-方法区的演进细节

JVM学习笔记第27天-方法区的演进细节