在我的过程中,我不断创建一个新的Thread对象(实际上是Thread的子类)(每秒最多几个),运行它并干净地结束。

我已经注意到,例如,当该过程进行了25天时,该过程可能会死掉而将hprof抛在后面,这意味着OOM。但是与堆中分配的内存相比,堆转储很小,因此它可能是PermGen OOM,我正试图找出罪魁祸首。

我没有使用任何特殊的jvm参数禁止-XX:+ HeapDumpOnOutOfMemoryError

最佳答案

您的堆转储肯定会告诉您PermGen的用法-您是否看过?

无论如何,如果加载类的类加载器是GCd,那么它加载的类也就是GCd。通常,这是卸载类的唯一方法。您应该考虑使用应用程序级别的类加载器,并定期丢弃它。这将防止您的内存问题。

关于java - 将在PermGen OOM中最终无休止的创建和运行线程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5648311/

10-11 18:05