Broken thread scheduling in indexed loop (missing safepoint?)

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Fri Nov 30 10:52:07 PST 2012


Alexey,

The reason is different from 7160161: safepoint is omitted, since the 
loop is counted.

After ~3 seconds, safepoint is initiated and sleeping loop enters it. 
However, other thread blocks the safepoint. That's why you don't see ticks.

Try the test with -XX:+TraceSafepoint:
Running: 1354301155502
Running: 1354301156503
Running: 1354301157504
Safepoint synchronization initiated. (9)

As a possible workaround, I would suggest you to rewrite the loop to 
make it non-countable.

Best regards,
Vladimir Ivanov

On 11/30/12 4:05 PM, Alexey Goncharuk wrote:
> Hi,
>
> We faced some weird issue with thread scheduling. At a first glance it
> looked like it relates to
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7160161 but not exactly.
>
> This is the code we ran:
>
> public static void main(String[] args) throws Exception { Thread worker
> = new Thread() { @Override public void run() { double d = 0; for (int j
> = 1; j < 2000000000; j++) d += Math.log(Math.E * j);
> System.out.println(d); } }; Thread reporter = new Thread() { @Override
> public void run() { try { while (true) { Thread.sleep(1000);
> System.out.println("Running: " + System.currentTimeMillis()); } } catch
> (InterruptedException ignored) { Thread.currentThread().interrupt(); } }
> }; reporter.start(); worker.start(); worker.join(); reporter.interrupt(); }
>
> One can expect that printing thread would output messages during all the
> calculation time, however it hangs after 3-4 iterations. Setting
> -XX:FreqInlineSize=0 as described in original bug report does not help
> in this case, but if I extract loop body into a separate method, setting
> this option works. Example passes with -Xint option as well. (Tested
> with 1.6.0_33, 1.6.0_37, 1.7.0_07 on Windows and 1.6.0_33 on Linux)
>
> I saw #7160161 marked as resolved, so I just wanted to confirm if
> behavior we see really relates to this issue and it was fixed (bug
> report covers non-Counted loop only).
>
> Also, is there any other workarounds rather then extracting the method
> and specifying FreqInlineSize=0?
>
> Thanks,
> Alexey Goncharuk
>


More information about the hotspot-compiler-dev mailing list