GWT 1.6 crashes (and a fix)
permalinkThere’s a bug in the latest Java 1.6 that Apple provides that gets tickled by the GWT 1.6 compiler. It manifests as a reproducible HotSpot compiler crash that looks like this:
[java] Invalid memory access of location 00000000 rip=01160767
When you look into the crash logs that Java produces (found under ~/Library/Logs/CrashReporter/java_*
), you can see that HotSpot was compiling a method when it crashed:
Java VM: Java HotSpot(TM) 64-Bit Server VM (1.6.0_07-b06-57 mixed mode macosx-amd64)
Current thread (0x0000000101843800): JavaThread "CompilerThread1" daemon [_thread_in_native, id=1756672000, stack(0x0000000168a4b000,0x0000000168b4b000)]
Stack: [0x0000000168a4b000,0x0000000168b4b000]
Current CompileTask:
C2:637 org.eclipse.jdt.internal.compiler.lookup.ParameterizedMethodBinding.<init>(Lorg/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding;Lorg/eclipse/jdt/internal/compiler/lookup/MethodBinding;)V (596 bytes)
The workaround is to disable JIT of some JDT methods using some advanced JVM command-line arguments. Using Ant, you can tack them on to your GWT compiler task <java>
blocks, like so:
<java classname="com.google.gwt.dev.Compiler" classpathref="compileClassPath@{module}" fork="true" failonerror="true">
...
<jvmarg value="-XX:CompileCommand=exclude,org/eclipse/core/internal/dtree/DataTreeNode,forwardDeltaWith" />
<jvmarg value="-XX:CompileCommand=exclude,org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding,<init>" />
<jvmarg value="-XX:CompileCommand=exclude,org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding,<init>" />
By applying those commands, you ask the HotSpot compiler to skip those methods (relying on the interpreter to run them). You’ll know it’s working if you see this during your compile:
[java] CompilerOracle: exclude org/eclipse/core/internal/dtree/DataTreeNode.forwardDeltaWith
[java] CompilerOracle: exclude org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.<init>
[java] CompilerOracle: exclude org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding.<init>
[java] Compiling module com.dotspots.ExtensionModule
I’m hoping that Apple eventually gets around to releasing an updated Java 1.6 for OSX. This bug was fixed in mainline Java a very long time ago!
Read full post