什么是烫发空间?(What is perm space?)

2019-06-18 11:20发布

虽然学习Java的内存分析,我总是看到除了术语“烫发空间”“堆”。 我知道堆是什么 - 什么是烫发空间?

Answer 1:

它代表着永久的一代 :

永久一代是特殊的,因为它拥有的元数据描述用户类(类不属于Java语言的一部分)。 这样的元数据的示例是描述的类和方法的对象和它们存储在常驻代。 与大型代码库的应用程序可以迅速填补堆的这一细分市场,这将导致java.lang.OutOfMemoryError :PermGen的不管你有多高的-Xmx和有多少内存的机器上。



Answer 2:

Perm space是用来保持信息加载的类和其他一些高级特性,如String Pool (用于高度优化的字符串相等测试),通常就会得到通过创建String.intern()方法。 当你的应用程序(班数)将增长空间,应能很快填补,因为这个空间的垃圾收集没有多少有效的按要求进行清理,你很快地从记忆中:烫发根空间误差。 此后,没有应用程序应有效,甚至有一个巨大的空JVM后的机器上运行。

启动您的应用程序之前,你应该java -XX:MaxPermSize来摆脱这种错误的。



Answer 3:

简单(和过于简单的)答案:这是在JVM中存储自己的簿记数据,而不是你的数据。



Answer 4:

烫发根代表永久代其持有关于类的元数据信息。

  1. 如果你创建一个类名称的假设,它的实例变量将静态的类加载器将被存储在永久代一起存储在堆内存和A级。
  2. 垃圾收集器会发现它很难澄清或无保存在永久代内存的内存空间。 因此,它总是建议保持PermGen的内存设置到最好限制。
  3. JAVA8推出了称为元空间生成的概念,当您使用JDK 1.8版本,因此出现PermGen不再需要。


Answer 5:

PermGen的空间是堆的保持虚拟机本身的所有反射数据,如类和方法的对象的区域。



Answer 6:

PermGen的空间始终称为方法area.When类装入器子系统将加载类文件(字节代码)到方法区域(PermGen的)。 它包含所有类的元数据如:你的类的完全限定名,直接父类,变量信息,构造信息的完全限定名,常量池Infor公司等。



Answer 7:

它拥有的东西像类定义,串池,等我想你可以把它称为元数据。



Answer 8:

PremGen下存在什么:类区配备PremGen专区。 静态字段还开发了在类加载时间,因此他们也存在PremGen。 常量池区域具有汇集如String所有不变的字段都保存在这里。 除此之外,由类加载器,对象阵列加载的类数据,由JVM所使用内部对象也位于。



Answer 9:

PermGen的空间代表内存分配永久代所有的Java不可变对象属于这一类,比如String它与文字或创建String.intern()方法和类加载到内存中。 PermGen的空间加快我们的字符串平等搜索。



文章来源: What is perm space?