Answers:
永久的一代。细节当然是特定于实现的。
简要地说,它包含与类和内联字符串关联的Java对象。在Sun的共享客户端实现中,classes.jsa
内存映射为初始数据,其中约一半为只读状态,而一半为写时复制。
古老的Java对象保留在Tenured Generation中。
JVM使用PermGen来保存已加载的类。您可以使用以下方法增加它:
-XX:MaxPermSize=384m
如果您使用的是Sun JVM或OpenJDK。
因此,如果收到OutOfMemoryException:PermGen,则需要增大PermGen的大小,否则可能会遇到类加载器问题。
Permgen代表永久一代。它是JVM内存区域之一。通过使用名为MaxPermSize的标志,它是固定大小的堆的一部分。
为什么命名为“ PermGen”?
这个permgen在Java的早期就被命名了。Permgen主电源保留已加载类的所有元数据。但是问题在于,一旦加载了一个类,它将一直保留在JVM中直到JVM关闭。因此,选择permgen这个名字。但是后来,动态加载类出现了,但名称没有更改。但是使用Java 8时,他们也解决了这个问题。现在permagen被重命名为具有动态内存大小的MetaSpace。