java - 是什么导致 JRE 6 JVM 代码缓存泄漏?

标签 java memory-leaks jvm

自从切换到 JRE 6 后,我服务器的代码缓存使用(非堆)一直在无限增长。我的应用程序在运行时创建了很多类,但这些类在 GC 过程中被成功卸载。我可以看到这些类在 gc 日志中被卸载,并且 permGen 的使用保持不变。我特别确保在我的代码中,一旦我完成这些类,它们就会被孤立,这样它们就能正确地从 permGen 中收集垃圾。

然而,代码缓存不断增长。我在切换到 JRE 6 后才意识到代码缓存。所以我想我的问题是:

  1. GC 是否包含代码缓存?
  2. 什么会导致代码缓存内存泄漏,特别是。
  3. JDK 6 中是否存在这方面的错误?

最佳答案

您可能想通读一下这个讨论,然后回过头来看看哪些内容可能有助于缩小讨论范围: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2009-January/000530.html

这个涉及到 JDK5 但可能会有帮助: http://www.nabble.com/Java-code-cache-memory-td22202283.html

你是用它来编译jsp页面,还是类似的东西?如果不是,应用程序启动后正在编译什么?您是否将 AspectJ 与运行时织入一起使用?

了解您在做什么有助于更好地了解如何提供帮助。

另外,当代码缓存耗尽时,它是停止重新编译还是jvm崩溃?我希望是前者。

您使用的是 Sun 的 JDK 吗?我猜你是因为我怀疑其他人是否被列为版本 6,但问问也无妨。

关于java - 是什么导致 JRE 6 JVM 代码缓存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586061/

相关文章:

java - Groovy 类未被收集但没有内存泄漏的迹象

java - jstat 和 jcmd 对元空间内存给出了不同的答案

java - JVM Bridge 关键字 - 有什么特殊用途吗?

java - SWIG Java 在使用 -DSWIGWORDSIZE64 时将 int64_t 转换为 jlong

java - SonarQube Eclipse 插件在本地分析时抛出错误

java - 在终端中编译 Java 程序导致日志错误

java - IndexOutOfBounds,当它不应该的时候

memory-leaks - Ninject 中的内存泄漏

.NET 资源泄漏陷阱

java - Java如何计算PC进入 hibernate 模式时的 hibernate 时间?