PermGen空间的意义

jav*_*eek 29 java jvm memory-management permgen

PermGen空间在java中有什么意义?

dan*_*ben 44

PermGen空间是为长期对象保留的 - 主要是Class由对象加载的对象ClassLoader.PermGen不会被垃圾收集,除非在非常特殊的情况下(特别是当ClassLoader加载这些类超出范围时).

这是一个垃圾收集优化 - 如果我们不希望被垃圾收集的对象被单独存储,它会压缩存储其余对象的空间,这导致垃圾收集器的工作量减少.


Syn*_*r0r 8

PermGen特定于具有世代垃圾收集的VM.

如果你使用JRockit,那么"PermGen的意义"就不存在了,因为JRockit没有这个概念.

几年前,当奇怪的"出于PermGen空间"错误开始出现并且没有人知道它的错误(Tomcat + Hibernate + Sun VM用来触发它)来替换其中一个组件时,它常见(现在问题已被理解,但几年前当他们开始裁剪时,很难找到任何有关此问题的信息).你可以用Resin替换Tomcat或用JRockIt替换Sun VM等.

我认为重要的是要指出PermGen不是Java规范的一部分,只是(相当)一些VM的实现细节.


Mic*_*rdt 6

您真正需要知道的唯一事情是PermGen空间与常规堆分开,并且不受-XmxVM参数的影响.如果您的应用程序加载了许多类定义(如应用程序服务器或IDE),则可以使用-XX:MaxPermSizeVM选项设置PermGen空间大小.