JBoss 5 perm 大小和堆大小

Posted

技术标签:

【中文标题】JBoss 5 perm 大小和堆大小【英文标题】:JBoss 5 perm size and heap size 【发布时间】:2014-10-08 06:35:46 【问题描述】:

JBoss 的 heap 和 perm size 之间有什么关系吗?我想增加最大堆大小,但我不确定它会对烫发大小产生什么样的影响。我正在运行 JDK 6。目前我没有遇到 perm gen 问题,但是如果我增加堆大小,是否存在需要我增加 perm gen 空间的隐式关系?有什么经验法则基本上就是我要问的吗?

【问题讨论】:

如果你检查它们之间的差异并意识到你需要增加哪一个会更好。 【参考方案1】:

不,如果您增加整体堆大小,则不一定需要增加 perm gen 大小。 perm gen 空间保存 JVM 加载的类。如果您部署的应用程序没有更改,则存储在 perm gen 空间中的数据量也保持不变 - 即使整体可用堆空间增加。

这种关系恰恰相反——如果你增加 perm gen 大小,你的应用程序可用的堆空间会更少——>在这种情况下,你可能会考虑增加整体堆大小。

【讨论】:

【参考方案2】:

为了理解heap和permgen,也许下面关于PermGen(或Java 8中的Metaspace)中存储的内容的解释有助于理解permgen的用途和与heap的区别:

如果您还记得,Java 中的所有内容都表示为一个对象。此外,所有对象都是来自特定类的实例。甚至类声明本身最终也只是非常具体的对象。但是让类声明有趣的是,在大多数 JVM 上,类声明被加载到一个特定的内存区域,名为 Permanent Generation(简称 PermGen)。所以 - 回顾一下:所有 Java 类都加载并存储在 Java PermGen 中。

这包括以下内容:

类的名称 类的字段 类的方法和方法的字节码 常量池信息 与类关联的对象数组和类型数组 即时编译器优化

差不多就是这样。还有一些零碎的东西,但对实际内存消耗的影响不会超过百分之几。所有这些都分配给 PermGen 并留在 PermGen 中。

如您所见,PermGen 的大小要求在很大程度上取决于加载的类的数量以及此类声明的大小。所以 - 一般来说,你加载到 JVM 的应用程序中的类越多,你需要的 PermGen 就越大。

【讨论】:

以上是关于JBoss 5 perm 大小和堆大小的主要内容,如果未能解决你的问题,请参考以下文章

栈大小和堆大小

堆栈和堆内存的大小[重复]

在 Weka 中使用 libsvm 分类器和堆大小

在 JBoss 上限制 HTTP 发布请求的大小

bzoj2111: [ZJOI2010]Perm 排列计数

JDK 1.8之后Perm Space有哪些变动? MetaSpace默认是无限的么? 还是你们会通过什么方式来指定大小?