什么是烫发空间?

ski*_*ppy 84 java profiling

在了解java内存分析的同时,除了"堆"之外,我还不断看到"perm space"这个术语.我知道堆是什么 - 什么是烫发空间?

And*_*are 100

它代表永久性的一代:

永久生成是特殊的,因为它包含描述用户类的元数据(不属于Java语言的类).这种元数据的示例是描述类和方法的对象,并且它们存储在永久生成中.具有大型代码库的应用程序可以快速填满堆的这一部分,这将导致 java.lang.OutOfMemoryError:PermGen,无论您的-Xmx有多高,以及您在机器上有多少内存.


DKS*_*ore 25

Perm space用于保存已加载类的信息以及一些其他高级功能String Pool(例如,用于高度优化的字符串相等性测试),这些功能通常由String.intern()方法创建.随着您的应用程序(类的数量)将增长,此空间将快速填充,因为此空间上的垃圾收集对于根据需要清理不太有效,您很快就会失去内存:perm gen space错误.之后,即使拥有一个巨大的空JVM,也不会有效地在该机器上运行应用程序.

在开始申请之前,您应该java -XX:MaxPermSize摆脱这个错误.


Mat*_*att 19

简单(和过度简化)的答案:这是jvm存储其自己的簿记数据的地方,而不是您的数据.


Pra*_*K S 17

Perm Gen代表永久生成,它保存有关类的元数据信息.

  1. 假设您创建了一个类名A,它的实例变量将存储在堆内存中,而类A和静态类加载器将存储在永久生成中.
  2. 垃圾收集器会发现很难清除或释放存储在永久代内存中的内存空间.因此,始终建议将permgen内存设置保持在可取的​​限制.
  3. JAVA8引入了称为元空间生成的概念,因此当您使用jdk 1.8版本时不再需要permgen.


Jes*_*sse 5

permgen 空间是堆的区域,其中包含虚拟机本身的所有反射数据,例如类和方法对象。