dja*_*fan 18 java heap heap-memory permgen
限制Java JVM上Permgen空间大小的目的是什么?为什么不总是将它设置为最大堆大小?为什么Java默认这么少的64MB?他们是否试图强迫人们通过这样做来注意代码中的permgen问题?
如果我的应用程序使用85MB的permgen,那么将它设置为96MB可能是安全的,但是如果它只是主堆的主要部分,为什么设置它如此之小?允许JVM在堆允许的情况下使用尽可能多的PermGen会不会有效?
Fra*_*eau 14
PermGen将在JDK8中消失.
限制Java JVM上Permgen空间大小的目的是什么?
没有耗尽资源.
为什么不总是将它设置为最大堆大小?
PermGen 不是 Java堆的一部分.此外,即使它是,对应用程序用类元数据和常量字符串填充堆也没什么帮助,因为你会得到"OutOfMemoryError:Java堆大小"错误.
Nei*_*fey 12
从概念上讲,对于程序员来说,你可以说"永久一代"在很大程度上是没有意义的.如果你需要加载一个类或其他"永久"数据并且还剩下内存空间,那么原则上你也可以将它加载到某个地方而不关心将这些项的集合称为"生成".
但是,理由可能更多:
因此,当我看到事物时,大多数时候分配永久"代"的原因实际上是出于实际的实现原因而不是因为程序员真的非常关心.
另一方面,对于程序员来说情况通常也不是很糟糕:所需的永久生成量通常是可预测的,因此您应该能够以合适的余地分配所需的数量.因此,如果您发现意外地超出了分配范围,这很可能是"严重错误"的信号.
注意:可能的情况是,PermGen最初设计要解决的一些问题在具有更大处理器缓存的现代64位处理器上并不是那么大的问题.如果在将来的Java版本中将其删除,这可能表明JVM设计人员认为它现在"已达到了目的".