Valgrind和Java

前端之家收集整理的这篇文章主要介绍了Valgrind和Java前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用Valgrind 3.7.0来查找我的 Java本机代码中的内存泄漏.我正在使用jdk1.6.0._29.

为此,我必须设置–trace-children = yes标志.设置该标志,我不再可以在任何java应用程序上运行valgrind,甚至可以像以下命令:

valgrind --trace-children=yes --smc-check=all java -version

将收到错误消息:

Error occurred during initialization of VM
   Unknown x64 processor: SSE2 not supported

我看过这个链接https://bugs.kde.org/show_bug.cgi?id=249943,但没有用.

运行程序没有Valgrind或没有–trace-children标志是罚款.

有人有什么想法可以做什么?

解决方法

您必须禁用JIT在valgrind下运行JVM,如下所示:
valgrind java -Djava.compiler=NONE ...

另外,如果最终使用生成的抑制(而且很有可能会这样!),则生成的抑制的调用堆栈的深度可能会出现问题,这在JVM下运行时更有可能发生.

在最近版本的valgrind中,生成的抑制可以包含比由valgrind / memcheck本身处理的更深层次的调用堆栈.这个问题的症状是valgrind意外终止,消息“堆栈跟踪中的调用者太多”.

这个问题很容易修复:在构建valgrind之前,编辑文件coregrind / m_errormgr.c并将#define中的硬编码值更改为更大的值(我使用99):

/ *抑制中上下文的最大呼叫者数. * /

#define VG_MAX_SUPP_CALLERS  99

然后根据文档构建和安装valgrind.

猜你在找的Java相关文章