gpt4 book ai didi

java - Valgrind 和 Java

转载 作者:太空狗 更新时间:2023-10-29 22:33:28 26 4
gpt4 key购买 nike

我想使用 Valgrind 3.7.0 查找我的 Java native 代码中的内存泄漏。我正在使用 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):

 /* Max number of callers for context in a suppression. */

#define VG_MAX_SUPP_CALLERS 99

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

关于java - Valgrind 和 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9216815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com