JBoss的堆和perm大小之间是否有任何关系?我想增加最大堆大小,但我不确定它对perm大小会产生什么样的影响。我正在运行JDK 6.目前我没有遇到perm gen问题,但是如果我增加堆大小是否存在隐含关系需要我增加perm gen空间?有什么经验法则基本上就是我要问的吗?
答案 0 :(得分:1)
不,如果增加整体堆大小,则不一定需要增加perm gen size。 perm gen空间保存由JVM加载的类。如果部署的应用程序没有更改,则存储在perm gen空间中的数据量也保持不变 - 即使整个可用堆空间增加也是如此。
关系是相反的 - 如果你增加了perm gen的大小,你的应用程序可用的堆空间就会减少 - >在这种情况下,您可能会考虑增加整体堆大小。
答案 1 :(得分:1)
为了理解堆和permgen,可能以下关于PermGen(或Java 8中的Metaspace)中存储内容的解释有助于理解permgen的目的和堆的差异:
如果您还记得,Java中的所有内容都表示为Object。此外,所有对象都是来自特定类的实例。甚至Class声明本身也只是非常具体的对象。但是,使类声明感兴趣的原因在于,在大多数JVM上,类声明被加载到特定的内存区域,名为Permanent Generation(简称PermGen)。回顾一下:所有Java类都被加载并存储在Java PermGen中。
这包括以下内容:
这就是它。更多的点点滴滴,但它不会影响实际内存消耗超过百分之几。所有这些都分配给PermGen并留在PermGen。
正如您所看到的,PermGen大小要求在很大程度上取决于加载的类的数量以及此类声明的大小。所以 - 通常,你加载到JVM中的应用程序中的类越多,你需要的PermGen就越大。