roe*_*erj 6 java java-native-interface memory-leaks out-of-memory
我有一些我运行的第三个库代码,经过一段时间后我遇到了OutOfMemoryError.所以我启动了Eclipse MAT并分析了内存.现在似乎无法处理内存,因为有一个对象显示为GC root: Native Stack.阅读文档:
本机代码中的in或out参数,例如用户定义的JNI代码或JVM内部代码.这通常是这种情况,因为许多方法具有本机部分,并且作为方法参数处理的对象成为GC根.例如,用于文件/网络I/O方法或反射的参数.
现在我的问题是:如何确认该对象是在JNI或其他地方使用的(即如何找到使用它的代码)?我可以以某种方式处置对象吗?我还有其他选择吗?
谢谢你的帮助!
显示的对象被证明是GC root: Native StackEclipse调试器的问题.当应用程序在没有调试器的情况下启动时(即使用'run'而不是'debug'),问题就消失了.这也是我无法找到我的项目中JNI中使用的对象的代码的原因(因为它们不是).
在没有调试的情况下找到真正的内存泄漏有点困难,但使用Eclipse MAT及其"查找泄漏嫌疑人"功能有很大帮助!
| 归档时间: |
|
| 查看次数: |
1484 次 |
| 最近记录: |