我试图分析我的应用程序,它抛出了如下的内存不足异常。

java.lang.OutOfMemoryError:无法创建新的本机线程

稍作搜索后,我发现这可能是因为c堆已耗尽。我已经检查了GC日志,并且堆内存可用,而那不是罪魁祸首。我需要分析c堆内存使用情况。有没有提供这种分析的工具。

当堆(young gen / old gen)已满时,垃圾回收会释放内存,但是如果c堆已满,该怎么办。 JVM /在这里如何释放内存?

编辑:
 我已经检查了线程数,该数量远小于我的应用程序能够处理的线程数。因此线程似乎不是这里的原因。发生这种情况不是因为线程数增加,而是当应用程序运行了很长时间且负载适中且线程数中等时。

最佳答案

如果使用的是JNI(或调用该程序),则本机代码中可能会发生内存泄漏。特别是C和C ++不会被垃圾收集,因此很容易造成意外。

07-25 21:16