什么是限制在Java的JVM PermGen的空间大小的目的是什么? 为什么不总是将其设置为最大堆大小? 为什么Java默认这样的少数64MB的? 他们试图迫使人们做这个要注意的PermGen在他们的代码的问题?
如果我的应用程序使用的PermGen的85MB,那么它可能是安全的,它设置为96MB,但为什么设置如果主堆的只是一部分真的就那么少呢? 那岂不是有效的,使JVM为堆允许使用尽可能多的PermGen?
什么是限制在Java的JVM PermGen的空间大小的目的是什么? 为什么不总是将其设置为最大堆大小? 为什么Java默认这样的少数64MB的? 他们试图迫使人们做这个要注意的PermGen在他们的代码的问题?
如果我的应用程序使用的PermGen的85MB,那么它可能是安全的,它设置为96MB,但为什么设置如果主堆的只是一部分真的就那么少呢? 那岂不是有效的,使JVM为堆允许使用尽可能多的PermGen?
从概念到程序员,你可能会说,一个“永久的一代”主要是没有意义的。 如果您需要加载类或其他“永久”数据,并且还有剩余的内存空间,然后在原则上,你可能也只是加载的地方,并没有在意调用这些项的“一代”的总可言。
然而,理由是可能更认为:
所以,当我看到的东西,大部分时间都分配一个永久的“一代”的原因确实是出于实际实现的原因不是因为程序员真正关心可怕得多。
在另一方面,这种情况通常不是程序员可怕之一:需要永久的产生量通常是可预测的,所以,你应该能够体面的余地分配所需的量。 所以,如果你发现你会意外地超过了分配,这很可能是一个信号,即“正经事是错误的”。
NB,则可能是一些认为PermGen的初衷是要解决的问题是不是与较大的处理器缓存现代的64位处理器这样的大问题的情况下。 如果在Java的未来版本中删除,这可能是一个迹象,表明JVM设计师觉得它现在已经“功成身退”。
PermGen的设置在JDK8消失。
什么是限制在Java的JVM PermGen的空间大小的目的是什么?
不耗尽资源。
为什么不总是将其设置为最大堆大小?
PermGen的不是 Java堆的一部分。 此外,即使它是,它不会有很大帮助的应用程序,以填补级元数据和常量字符串堆,因为你会再拿到“的OutOfMemoryError:Java堆大小”的错误来代替。
PermGen的就是类数据和其他静态的东西(如字符串文字)进行分配。
你宁愿分配内存以Java堆的应用程序数据( Xms
和Xmx
,其中年轻的 (短期)和终身的对象去(当JVM的实现,他们需要保持的时间更长))。
所以,历史悠久的PermGen 64MB默认可以是任意的,但有明确设置它可以让你知道(控制)您的应用程序有多少静态数据导致JVM来存储。