Java 如何执行C堆分析

Java 如何执行C堆分析,java,memory-management,garbage-collection,Java,Memory Management,Garbage Collection,我试图分析我的应用程序,它抛出了内存不足异常,如下所示 java.lang.OutOfMemoryError:无法创建新的本机线程 通过谷歌搜索,我发现这可能是因为c堆已经耗尽。我已经检查了GC日志,堆内存可用,这不是罪魁祸首。我需要分析c堆内存的使用情况。有没有提供这种分析的工具 当堆(年轻的一代/老的一代)已满时,垃圾收集会释放内存,但如果c堆已满怎么办。JVM/在这里是如何释放内存的 编辑: 我已经检查了线程数,它远远小于我的应用程序能够处理的线程数。所以线程似乎不是这里的原因。异常不是在

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

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

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

当堆(年轻的一代/老的一代)已满时,垃圾收集会释放内存,但如果c堆已满怎么办。JVM/在这里是如何释放内存的

编辑:
我已经检查了线程数,它远远小于我的应用程序能够处理的线程数。所以线程似乎不是这里的原因。异常不是在线程数增加时发生的,而是当应用程序在中等负载和中等速率线程数下运行很长时间时发生的

如果您正在使用JNI(或调用使用JNI的程序),则本机代码中可能存在内存泄漏。特别是C和C++不是垃圾收集,所以这很容易导致意外。

这个问题感觉好像是在受苦。OOME:无法创建新的本机线程通常会发生,因为一次必须运行多个活动线程。为什么有这么多线程,如何减少线程数。这可能是您的“X”,您应该询问,而不是您建议的“Y”(C堆分析)。感谢您的回复。我已经检查了线程数,它远远小于我的应用程序能够处理的线程数。所以线程似乎不是这里的原因。异常不是在三个计数增加时发生的,而是在应用程序已运行很长时间且具有中等负载和中等速率线程计数时发生的。@Chinta感谢您的澄清。将这些信息添加到问题中可能是一个好主意,这样您就不会像我的评论那样得到答案(认为这与线程数有关)。