gpt4 book ai didi

java - 连接到jvm

转载 作者:行者123 更新时间:2023-12-01 04:40:41 24 4
gpt4 key购买 nike

我想访问 jvm 堆来迭代对象。我发现以下example如何做到这一点。我使用jdk1.7.0_11

我尝试了以下代码:

public static void main(String[] args) {
RuntimeMXBean runtimeBean = ManagementFactory.getRuntimeMXBean();
System.out.println(runtimeBean.getVmName());
System.out.println(runtimeBean.getVmVendor());
System.out.println(runtimeBean.getVmVersion());
String jvmName = runtimeBean.getName();
BugSpotAgent agent = new BugSpotAgent();
agent.attach(Integer.parseInt(jvmName.split("@")[0])); // exception here!!!!

VM.initialize(null, false);
VM vm = VM.getVM();

System.out.println(vm.getVMInternalInfo());

ObjectHeap heap = vm.getObjectHeap();
heap.iterate(new CustomHeapVisitor());
}

有以下输出:

Java HotSpot(TM) 64-Bit Server VM
Oracle Corporation
23.6-b04

和异常(exception):

   Exception in thread "main" sun.jvm.hotspot.debugger.DebuggerException: Windbg Error: AttachProcess failed!
at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.attach0(Native Method)
at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.attach(WindbgDebuggerLocal.java:152)
at sun.jvm.hotspot.bugspot.BugSpotAgent.attachDebugger(BugSpotAgent.java:789)
at sun.jvm.hotspot.bugspot.BugSpotAgent.setupDebuggerWin32(BugSpotAgent.java:712)
at sun.jvm.hotspot.bugspot.BugSpotAgent.setupDebugger(BugSpotAgent.java:515)
at sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:492)
at sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:331)
at mishanesterenko.jdi.Main.main(Main.java:27)

为了使这项工作顺利进行,还应该做些什么?最后,我想访问堆中的 jvm 对象图并搜索该图。

最佳答案

agent.attach(Integer.parseInt(jvmName.split("@")[0])); // exception here!!!!

关于上面,我认为你应该传递另一个jvm进程id,而不是当前进程id。

您可以删除此行:

VM.initialize(null, false);

所以,我可以很好地工作。

关于java - 连接到jvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16625191/

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