为什么PermGen的默认大小如此之小?
限制Java JVM上Permgen空间大小的目的是什么? 为什么不总是将其设置为最大堆大小? 为什么Java默认为64MB这样一小部分? 他们是否试图通过这样做来强迫人们注意代码中的permgen问题?
如果我的应用使用85MB的permgen,那么将它设置为96MB可能是安全的,但为什么将它设置得如此之小以至于它只是主堆的真正一部分? 让JVM能够像堆一样使用PermGen不是很有效吗?
从概念上讲,对于程序员来说,你可能会认为“永久代”基本上毫无意义。 如果您需要加载类或其他“永久性”数据,并且剩余内存空间,那么原则上可以将它加载到某个地方,而不必关心将这些项目的聚合称为“代”。
然而,理由可能更多的是:
所以当我看到事物时,大多数时候分配永久“代”的原因实际上是出于实际的实施原因,而不是因为程序员真的非常关心。
另一方面,对于程序员来说,情况通常并不可怕:永久生成所需的数量通常是可预测的,因此您应该能够以合适的余地分配所需的数量。 所以如果你发现你意外地超出了分配,这可能是一个“严重错误的信号”。
注意事项PermGen最初设计要解决的一些问题可能并非现代64位处理器中具有较大处理器缓存的大问题。 如果在未来的Java版本中将其删除,这可能表明JVM设计人员认为它现在“已达到其目的”。
PermGen将设置为在JDK8中消失。
限制Java JVM上Permgen空间大小的目的是什么?
不耗尽资源。
为什么不总是将其设置为最大堆大小?
PermGen不是Java堆的一部分。 此外,即使是这样,对于使用类元数据和常量字符串填充堆的应用程序也没有多大帮助,因为您会因此而得到“OutOfMemoryError:Java堆大小”错误。
PermGen是分配类数据和其他静态内容(如字符串文字)的地方。
你应该把内存分配给你的应用程序数据的Java堆( Xms
和Xmx
,其中年轻(短命)和持久对象去(当JVM意识到他们需要保持更长的时间))。
因此,历史悠久的PermGen 64MB默认值可能是任意的,但是您明确地设置它可以让您知道(并控制)您的应用程序导致JVM存储的静态数据量。
链接地址: http://www.djcxy.com/p/82795.html