Tag: 永久生成

PermGen与电梯和docker的问题

我正在开发标准的升降平台(maven和jetty)。 我反复(每隔几天一次)得到这个: Exception in thread "7048009@qtp-3179125-12" java.lang.OutOfMemoryError: PermGen space 2009-09-15 19:41:38.629::WARN: handle failed java.lang.OutOfMemoryError: PermGen space 这是在我的开发环境。 这不是问题,因为我可以继续重新启动服务器。 在部署我没有这些问题,所以这不是一个真正的问题。 我只是好奇。 我不太了解JVM。 我认为我认为永久的一代记忆是用于类和string的东西是正确的? 我记得有点与.NET内存模型混淆了… 为什么会发生这种情况? 默认值是疯狂的低? 它是否与所有的Scala必须为函数对象和类似的FP事物创build的辅助对象? 每次我用新编写的代码(每隔几分钟)就重新启动Jetty,我想它会重新加载类。但是即使如此,它不能成为那么多吗? JVM不能够处理大量的类吗? 干杯 乔

在Java中的静态分配 – 堆,堆栈和永久生成

我最近在java中对内存分配scheme进行了大量的研究,而且我从各种来源阅读的时候都有很多疑问。 我已经收集了我的概念,并且要求通读所有的观点并对其进行评论。 我知道内存分配是特定于JVM的,所以我必须事先说,我的问题是Sun特有的。 类(由类加载器加载)进入堆中的特殊区域:永久生成 所有与类名相关的信息,与类关联的对象数组,与JVM使用的内部对象(如java / lang / Object)以及优化信息相关的信息都会进入永久生成区域。 所有静态成员variables都保留在永久变形区域。 对象走在另一堆:年轻一代 每个类的每个方法只有一个副本,方法是静态的或非静态的。 该副本放在永久代区域。 对于非静态方法,所有的参数和局部variables都进入堆栈 – 每当有一个具体的方法调用时,我们就得到一个新的与之关联的栈帧。 我不知道静态方法的局部variables存储在哪里。 他们在永久一代吗? 或者只是他们的参考文献被存储在永久代的区域,而实际的副本是在别的地方(哪里?) 我也不确定方法的返回types存储在哪里。 如果对象(在年轻一代)需要使用静态成员(在永久代),它们被赋予一个静态成员的引用&&它们被给予足够的内存空间来存储方法的返回types等。 感谢您通过这个!