我注意到,当代码处于紧密循环中时,jstack无法正常工作。
例如,在此代码中:
private static void testAllocationNotOnHeap(){
long time = System.currentTimeMillis();
long result =0;
for (int j = 0; j < 20_000; j++) {
for (int i = 0; i < 100_000_000; i++) {
result += new TestObject(5,5).getResult();
}
}
System.out.println("Allocation not on heap took "
+ (System.currentTimeMillis()-time)
+ " with result " + result);
}
如果你运行jstack,你会收到以下消息:
无法打开套接字文件:目标进程未响应或未加载HotSpot VM 当目标进程没有响应时,可以使用-F选项
只要您允许代码“呼吸”&#39;例如通过每隔几千次迭代添加一个System.out,一切正常。
如果您想从jmc运行jconsole或者飞行记录器,请注意这一点。
我想了解为什么会这样,以及我能做些什么,因为我想描述一个紧凑的循环。