Transient miscompilation problem on 1.8 (invalid AIOOB/NPE thrown from the method body).
dawid.weiss at gmail.com
Tue Aug 11 21:27:08 UTC 2015
We tried to narrow it down. The problem is tied to tiered compilation
somehow because turning it off makes the test pass with flying colors:
PASSES -Xmx4g -Xbatch -XX:CICompilerCount=1 -XX:-TieredCompilation
PASSES -Xmx4g -XX:-TieredCompilation
FAILS -Xmx4g -XX:+TieredCompilation
FAILS -Xmx4g -Xbatch -XX:CICompilerCount=2 -XX:+TieredCompilation
What's more interesting is that 1.9 and the most recent ea of 1.8
(u60) also pass, even with tiered compilation turned on:
PASSES -Xmx4g -Xbatch -XX:CICompilerCount=2 -XX:+TieredCompilation
PASSES [always, regardless of options]
I can't tell whether it's something masking the original problem or
whether the bug has been fixed in between. I looked at JIRA logs, but
can't find anything specific. If somebody knows what this could be,
I'd appreciate a pointer.
On Tue, Aug 11, 2015 at 4:25 PM, Dawid Weiss <dawid.weiss at gmail.com> wrote:
> We have encountered a transient miscompilation problem (on 1.8u40). We
> get an AIOOB exception from a snippet of code which (provably) cannot
> throw it. The AIOOB is thrown without a stack trace. What's
> interesting is that when we set:
> we get an NPE exception (which, again, is provably impossible at Java
> code level).
> The problem does not reproduce on my machine with i7 3770K (at least
> so far), but does reproduce consistently on i7 2600K (and our
> customer's machine; exact spec unknown).
> I will be looking into isolating this issue as it is in our
> proprietary code, but the pattern seems to be as follows:
> 1) new instance of A is created, with a new instance of B, which is a
> single-implementation of interface C.
> 2) there is a tight loop which calls A (and B) methods.
> There is no way for an AIOOB (or NPE) to be present in any of A or B,
> but the stack trace indicates A.
> I suspect an OSR miscompilation somewhere, but since I can't reproduce
> it locally it's a bit of a problem to experiment with JVM versions and
> internal flags.
> Any hints on what it can be related to (flags to try, etc.) would be
More information about the hotspot-compiler-dev