Java - 为什么jstack在紧密的循环中工作

时间:2015-05-07 23:00:24

标签: java jstack

我注意到,当代码处于紧密循环中时,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或者飞行记录器,请注意这一点。

我想了解为什么会这样,以及我能做些什么,因为我想描述一个紧凑的循环。

0 个答案:

没有答案