java permgen是什么_关于java:PermGen空间的意义

PermGen空间在Java中的意义是什么?

PermGen实际代表什么的可能重复项?

PermGen空间是为长期对象保留的-大多数对象是ClassLoader加载的Class对象。除非在非常特殊的情况下(特别是当加载这些类的ClassLoader超出范围时),否则不会对PermGen进行垃圾回收。

这是垃圾收集的优化-如果我们不希望将垃圾收集的对象分开存储,则会压缩其余对象的存储空间,从而减少垃圾收集器的工作量。

您所指的ClassLoader是系统类加载器吗? 引导类加载器加载的类存储在哪里?

引导加载程序加载的类是该语言必不可少的类,例如String和Object。 这是JVM本地实现的一部分,因此没有关于" where"的标准答案。

精细。 那么permgen是否包含系统类加载器加载的类?

对,那是正确的。 请记住,我们正在谈论JVM的Sun实现。 PermGen不是该规范的一部分,因此另一个JVM(如另一位发布者提到的JRockit)将没有它。

PermGen特定于具有分代垃圾回收的VM。

如果您使用JRockit,那么" PermGen的重要性"就不存在,因为JRockit没有这个概念。

几年前,当奇怪的"超出PermGen空间"错误开始出现并且没人知道是谁的错误(Tomcat + Hibernate + Sun VM触发了此错误)来替换其中一个组件时,这很常见。 (如今已经理解了这些问题,但是几年前开始种植时,几乎找不到任何信息)。您可以用Resin替换Tomcat或用JRockIt等替换Sun VM。

我认为必须指出,PermGen不是Java规范的一部分,而只是(相当)某些VM的实现细节。

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

永久代保存描述用户类(不属于Java语言的类)的元数据。

具有大型代码库的应用程序可以填满这部分堆,这将导致java.lang.OutOfMemoryError: PermGen。这不受-Xmx设置或计算机上内存量的影响。要设置新的初始大小,请使用-XX:PermSize=64m。要设置最大大小,请使用-XX:MaxPermSize=128m

"不属于Java语言的类"是什么意思? 您知道不会在PermGen中存储的任何类吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值