当前位置:  开发笔记 > 编程语言 > 正文

PermGen实际上代表什么?

如何解决《PermGen实际上代表什么?》经验,为你挑选了5个好方法。

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

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

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



1> Tom Hawtin -..:

永久代.细节当然是特定于实现的.

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

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


在JDK 8中,根本没有永久性的一代!看到这个答案多年来不断发展,这很有趣.
"在JDK 7中,不再在Java堆的永久代中分配实例化的字符串":http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html
@BrianGordon是正确的..有关这方面的更多信息:http://stackoverflow.com/a/22509753/4557537

2> bajafresh4li..:

JVM使用PermGen来保存加载的类.您可以使用以下方法增加它

-XX:MaxPermSize=384m

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

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


在您发布此评论时,您接受了哪个答案?目前接受的答案([这一个](http://stackoverflow.com/a/320469/2562319),"Tom Hawtin - tackline")看起来很准确.编辑你的评论可能有意义,所以它不会引导人们不信任当前接受的答案吗?

3> Dustin..:

永久代.有关垃圾收集器的更多详细信息,请参阅java GC调整指南.



4> Alex K...:

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

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



5> Michael East..:

PermGen代表永久世代.

这是关于DDJ 的简要介绍

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有