jvm JBoss 5永久大小和堆大小

5gfr0r5j  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(164)

JBoss的堆大小和perm大小之间有什么关系吗?我想增加最大堆大小,但我不确定它会对perm大小有什么影响。我运行的是JDK 6。目前我没有遇到perm gen问题,但如果我增加堆大小,是否有一个隐含的关系,需要我增加perm gen空间?是否有任何经验法则本质上是我所问的?

yc0p9oo0

yc0p9oo01#

不,如果增加了总的堆大小,则不一定需要增加perm gen大小。perm gen空间保存JVM加载的类。如果部署的应用程序没有更改,则要存储在perm gen空间中的数据量也保持不变-即使增加了总的可用堆空间。
关系正好相反--如果增加perm gen的大小,应用程序可用的堆空间将减少--在这种情况下,您可能会考虑同时增加整个堆的大小。

8ehkhllq

8ehkhllq2#

为了理解堆和permgen,下面关于PermGen(或Java 8中的Metaspace)中存储的内容的解释可能有助于理解permgen的用途以及与堆的区别:
如果您还记得,Java中的所有内容都表示为Object。而且,所有对象都是来自特定Class的示例。甚至Class声明本身最终也只是非常特定的Object。但使Class声明有趣的是,在大多数JVM中,Class声明被加载到一个特定的内存区域中,称为Permanent Generation(简称PermGen)。因此,总结一下:所有Java类都将被加载并存储在JavaPermGen中。
这包括以下内容:

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

差不多就是这样了。还有一些零碎的东西,但它对实际内存消耗的影响不会超过百分之几。所有这些都被分配到PermGen并留在PermGen中。
正如您所看到的,PermGen的大小要求在很大程度上取决于加载的类的数量以及此类声明的大小。因此,一般来说,加载到JVM中的应用程序中的类越多,您需要的PermGen就越大。

相关问题