OutOfMemoryError on my BF interpreter
Cristian Esquivias
cristian.esquivias at gmail.com
Tue May 1 06:24:49 UTC 2018
With the release of 1.0.0-RC1 I thought I'd come back and see how
Graal is doing. Great job; Graal is really starting to look like the
platform everyone should pay attention to.
To get back into it, I built a Brainf*ck interpreter with Truffle
(https://github.com/cesquivias/bf-graal). I modeled it after
simplelanguage so it should be easy to build and run.
While running the mandelbrot program, about halfway through the
program, the VM starts throwing OutOfMemoryError exceptions (one
pasted below). It created a zip file under dumps/ but it contains a
.bgv file I don't what to do with and a log file that just contains
the stacktrace.
I ran jvisualvm and took a heap dump. There are ~200k long[] objects
alone created by graal taking up ~50% of the memory. Digging through
the references it seems to be created/retained in
org.graalvm.compiler.lir.alloc.lsra.LinearScanLifetimeAnalysisPhase$$Lambda$48#1
[GC root - Java frame]
I'd provide some file from jvisualvm but the save button is grayed
out. I hope this is enough info. My interpreter is up on GitHub so
feel free to test it out.
I tested this both on the community & enterprise edition on Ubuntu
18.04 in VirtualBox.
- Cristian
Thread[TruffleCompilerThread-12,10,main]: Compilation of
BFRepeatingNode at 222b298d<OSR> failed: java.lang.OutOfMemoryError: Java
heap space
at org.graalvm.compiler.lir.util.IndexedValueMap.<init>(IndexedValueMap.java:55)
at org.graalvm.compiler.lir.dfa.RegStackValueSet.<init>(RegStackValueSet.java:62)
at org.graalvm.compiler.lir.dfa.RegStackValueSet.copy(RegStackValueSet.java:70)
at org.graalvm.compiler.lir.dfa.RegStackValueSet.copy(RegStackValueSet.java:46)
at org.graalvm.compiler.lir.dfa.LocationMarker.processBlock(LocationMarker.java:107)
at org.graalvm.compiler.lir.dfa.LocationMarker.build(LocationMarker.java:81)
at org.graalvm.compiler.lir.dfa.LocationMarkerPhase.run(LocationMarkerPhase.java:51)
at org.graalvm.compiler.lir.dfa.LocationMarkerPhase.run(LocationMarkerPhase.java:47)
at org.graalvm.compiler.lir.phases.LIRPhase.apply(LIRPhase.java:115)
at org.graalvm.compiler.lir.phases.LIRPhase.apply(LIRPhase.java:107)
at org.graalvm.compiler.lir.phases.LIRPhaseSuite.run(LIRPhaseSuite.java:96)
at org.graalvm.compiler.lir.phases.LIRPhase.apply(LIRPhase.java:115)
at org.graalvm.compiler.lir.phases.LIRPhase.apply(LIRPhase.java:107)
at org.graalvm.compiler.core.GraalCompiler.emitLowLevel(GraalCompiler.java:367)
at org.graalvm.compiler.core.GraalCompiler.emitLIR0(GraalCompiler.java:336)
at org.graalvm.compiler.core.GraalCompiler.emitLIR(GraalCompiler.java:295)
at org.graalvm.compiler.core.GraalCompiler.emitBackEnd(GraalCompiler.java:275)
at org.graalvm.compiler.core.GraalCompiler.compile(GraalCompiler.java:175)
at org.graalvm.compiler.core.GraalCompiler.compileGraph(GraalCompiler.java:160)
at org.graalvm.compiler.truffle.compiler.TruffleCompilerImpl.compilePEGraph(TruffleCompilerImpl.java:445)
at org.graalvm.compiler.truffle.compiler.TruffleCompilerImpl.compileAST(TruffleCompilerImpl.java:391)
at org.graalvm.compiler.truffle.compiler.TruffleCompilerImpl$TruffleCompilationWrapper.performCompilation(TruffleCompilerImpl.java:544)
at org.graalvm.compiler.truffle.compiler.TruffleCompilerImpl$TruffleCompilationWrapper.performCompilation(TruffleCompilerImpl.java:493)
at org.graalvm.compiler.core.CompilationWrapper.run(CompilationWrapper.java:167)
at org.graalvm.compiler.truffle.compiler.TruffleCompilerImpl.doCompile(TruffleCompilerImpl.java:222)
at org.graalvm.compiler.truffle.runtime.GraalTruffleRuntime.doCompile(GraalTruffleRuntime.java:679)
at org.graalvm.compiler.truffle.runtime.GraalTruffleRuntime$1.run(GraalTruffleRuntime.java:745)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
To disable compilation failure notifications, set
CompilationFailureAction to Silent (e.g.,
-Dgraal.CompilationFailureAction=Silent).
To print a message for a compilation failure without retrying the
compilation, set CompilationFailureAction to Print (e.g.,
-Dgraal.CompilationFailureAction=Print).
Retrying compilation of BFRepeatingNode at 222b298d<OSR>
More information about the graal-dev
mailing list