PermGen实际上代表什么?

时间:2008-11-25 21:30:31

标签: java permgen

我知道PermGen是什么,它用于什么,它失败的原因,如何增加它等等。

我不知道的是PermGen实际上代表什么。永久......根......某事?

有谁知道PermGen实际上代表什么?

8 个答案:

答案 0 :(得分:80)

永久代。详细信息当然是特定于实现的。

简而言之,它包含与类和实习字符串关联的Java对象。在Sun的客户端实现中进行共享时,classes.jsa被内存映射以形成初始数据,大约一半是只读,一半是写入。

仅旧的Java对象保留在Tenured Generation中。

答案 1 :(得分:58)

JVM使用PermGen来保存加载的类。您可以使用以下方式增加它:

-XX:MaxPermSize=384m

如果您使用的是Sun JVM或OpenJDK。

因此,如果你得到一个OutOfMemoryException:PermGen你需要使PermGen更大或者你可能遇到类加载器问题。

答案 2 :(得分:20)

永久代。有关垃圾收集器的更多详细信息,请参阅java GC tuning guide

答案 3 :(得分:8)

与原始问题没有真正相关的匹配,但可能有人会发现它很有用。 PermGen确实是Java用于保存其类的内存区域。因此,我们中的许多人在PermGen中遇到过OOM,如果有的话,例如很多课程。

自Java 8以来,PermGen区域已被MetaSpace区域取代,后者更有效率,默认情况下无限制(或更准确地说 - 受本机内存量的限制,具体取决于32或64位jvm和OS虚拟内存可用性) 。但是,可以通过某种方式对其进行调整,例如通过指定区域的最大限制。您可以在this blog post中找到更多有用的信息。

答案 4 :(得分:6)

PermGen代表 Permanent Generation

关于DDJ的

Here is a brief blurb

答案 5 :(得分:3)

答案 6 :(得分:3)

如果我没记错的话,gen代表生成,就像在世代垃圾收集器中一样(以不同于中年和“永久”物体的方式对待年轻物体)。局部性原则表明最近创建的对象将首先消失。

答案 7 :(得分:1)

Permgen代表永久一代。它是JVM内存区域之一。通过使用称为MaxPermSize的标志,它是固定大小的堆的一部分。

为什么命名为“ PermGen”?

该permgen在Java的早期就被命名。 Permgen主电源保留已加载类的所有元数据。但是问题在于,一旦加载了一个类,它将一直保留在JVM中直到JVM关闭。因此,选择permgen这个名字。但是后来,动态加载类出现了,但名称没有更改。但是使用 Java 8 ,他们也解决了这个问题。现在, permagen 重命名为具有动态内存大小的 MetaSpace