gpt4 book ai didi

memory-leaks - jetty 7 : OutOfMemoryError: PermGen space on application redeploy

转载 作者:行者123 更新时间:2023-12-04 04:54:29 24 4
gpt4 key购买 nike

第一次应用程序正确启动。然后我删除 webapp/*.war 文件并粘贴新版本的 *.war。 Jetty 开始部署新 war 但错误 java.lang.OutOfMemoryError: PermGen space发生。如何配置 Jetty 以修复错误/进行正确的重新部署?

solution对我没有帮助。
jetty 版本:jetty-7.4.3.v20110701

最佳答案

可能没有办法解决这个问题。每个 JVM 都有一个 PermGen 内存区域,用于类加载和静态数据。每当您的应用程序被取消部署时,它的类加载器都应该被丢弃,并且所有类也应该被它加载。当由于对类加载器的其他引用仍然存在而失败时,垃圾收集类加载器和您的应用程序类也将失败。

A blog entryits follow up解释问题的可能来源。每当应用程序容器的代码使用一个包含对您的一个类的引用的类时,就会阻止对您的类进行垃圾回收。来自上述博客条目的示例是 java.util.logging.Level构造函数:

protected Level(String name, int value) {
this.name = name;
this.value = value;
synchronized (Level.class) {
known.add(this);
}
}

请注意 knownjava.util.logging.Level 的静态成员.构造函数存储对所有创建的实例的引用。所以尽快 Level类是从应用程序代码之外加载或实例化的,垃圾收集无法删除您的类。

为了解决这个问题,您可以避免将所有正在使用的类与您自己的代码一起使用,或者确保没有对您的类的引用与您的代码一起使用。这两个问题都可能发生在 Java 提供的任何类中,因此无法在您的应用程序中修复。您不能仅通过更改您自己的代码来防止问题!

您的选择基本上是:
  • 增加内存限制并减少错误发生的频率
  • 按照链接的博客文章中的详细说明分析您的代码,并避免使用存储对您的对象的引用的类
  • 关于memory-leaks - jetty 7 : OutOfMemoryError: PermGen space on application redeploy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6956613/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com