首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Valgrind和Java

Valgrind和Java
EN

Stack Overflow用户
提问于 2012-02-10 02:43:13
回答 2查看 26K关注 0票数 22

我想使用Valgrind 3.7.0来查找Java本机代码中的内存泄漏。我使用的是jdk1.6.0._29。

为此,我必须设置--trace-children=yes标志。设置了该标志,我就不能再在任何java应用程序上运行valgrind,即使是像这样的命令:

代码语言:javascript
复制
valgrind --trace-children=yes --smc-check=all java -version

将得到错误消息:

代码语言:javascript
复制
   Error occurred during initialization of VM
   Unknown x64 processor: SSE2 not supported

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

在不使用Valgrind或--trace-children标志的情况下运行程序也可以。

有谁知道我能做什么吗?

EN

回答 2

Stack Overflow用户

发布于 2012-06-15 03:28:25

您必须禁用JIT才能在valgrind下运行JVM,如下所示:

代码语言:javascript
复制
valgrind java -Djava.compiler=NONE ...

此外,如果您最终使用生成的抑制(您很可能会这样做!),那么在生成的抑制中调用堆栈的深度可能会出现问题,当在JVM下运行时,这种情况更有可能发生。

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

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

代码语言:javascript
复制
 /* Max number of callers for context in a suppression. */

 #define VG_MAX_SUPP_CALLERS  99

然后根据文档构建并安装valgrind。

票数 20
EN

Stack Overflow用户

发布于 2012-02-28 05:33:59

Valgrind捕获并(在一定程度上)模拟处理器,这似乎会导致JVM对SSE和跳出的支持感到困惑

我建议您尝试告诉JVM不要为SSE而烦恼,您应该能够使用JVM标志-XX:UseSSE=0为hotspot关闭这一功能。

祝好运!对JVM进行赋值有点困难,因为它们彼此之间有些敌意。

也可能是您的valgrind和java版本我在本地运行了您的命令,使用valgrind 3.6.1和java 1.6.0_26和java 1.7.0-b147都没有问题。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9216815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档