We have a large GWT application with 161 compilation permutations (7
user agent permutations * 23 languages). The compiler requires 2.5GB
of memory to run and compilations have recently started to fail (non-
deterministically) with the following errors (full stack traces at the
end of this message):
[INFO] java.lang.NullPointerException
[INFO] at
com.google.gwt.resources.rebind.context.InlineResourceContext.deploy(InlineResourceContext.java:
40)
[INFO] javax.imageio.IIOException: Can't create output stream!
[INFO] at javax.imageio.ImageIO.write(ImageIO.java:1560)
[INFO] at
com.google.gwt.resources.rg.ImageBundleBuilder.createImageBytes(ImageBundleBuilder.java:
558)
Is there any way that we can reduce the memory footprint of the
compiler? How can we prevent the above compilation errors from
occuring?
Thanks,
-Jason Terk
---
[INFO] java.lang.NullPointerException
[INFO] at
com.google.gwt.resources.rebind.context.InlineResourceContext.deploy(InlineResourceContext.java:
40)
[INFO] at
com.google.gwt.resources.rebind.context.AbstractResourceContext.deploy(AbstractResourceContext.java:
78)
[INFO] at com.google.gwt.resources.rg.ImageResourceGenerator
$ExternalImage.render(ImageResourceGenerator.java:310)
[INFO] at
com.google.gwt.resources.rg.ImageResourceGenerator.renderImageMap(ImageResourceGenerator.java:
662)
[INFO] at
com.google.gwt.resources.rg.ImageResourceGenerator.createFields(ImageResourceGenerator.java:
504)
[INFO] at
com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator.createFieldsAndAssignments(AbstractClientBundleGenerator.java:
773)
[INFO] at
com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator.createFieldsAndAssignments(AbstractClientBundleGenerator.java:
854)
[INFO] at
com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator.generateIncrementally(AbstractClientBundleGenerator.java:
460)
[INFO] at
com.google.gwt.dev.javac.StandardGeneratorContext.runGeneratorIncrementally(StandardGeneratorContext.java:
647)
[INFO] at
com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:
41)
[INFO] at com.google.gwt.dev.shell.StandardRebindOracle
$Rebinder.rebind(StandardRebindOracle.java:78)
[INFO] at
com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:
268)
[INFO] at
com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:
257)
[INFO] at
com.google.gwt.dev.DistillerRebindPermutationOracle.getAllPossibleRebindAnswers(DistillerRebindPermutationOracle.java:
91)
[INFO] at
com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.doFindAdditionalTypesUsingRebinds(WebModeCompilerFrontEnd.java:
96)
[INFO] at com.google.gwt.dev.jdt.AbstractCompiler$Sandbox
$CompilerImpl.process(AbstractCompiler.java:254)
[INFO] at
org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:444)
[INFO] at com.google.gwt.dev.jdt.AbstractCompiler$Sandbox
$CompilerImpl.compile(AbstractCompiler.java:173)
[INFO] at com.google.gwt.dev.jdt.AbstractCompiler$Sandbox
$CompilerImpl.compile(AbstractCompiler.java:288)
[INFO] at com.google.gwt.dev.jdt.AbstractCompiler$Sandbox
$CompilerImpl.access$400(AbstractCompiler.java:139)
[INFO] at
com.google.gwt.dev.jdt.AbstractCompiler.compile(AbstractCompiler.java:
588)
[INFO] at
com.google.gwt.dev.jdt.BasicWebModeCompiler.getCompilationUnitDeclarations(BasicWebModeCompiler.java:
97)
[INFO] at
com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.getCompilationUnitDeclarations(WebModeCompilerFrontEnd.java:
52)
[INFO] at
com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompiler.java:
569)
[INFO] at
com.google.gwt.dev.jjs.JavaScriptCompiler.precompile(JavaScriptCompiler.java:
33)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:
284)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:
233)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:
145)
[INFO] at com.google.gwt.dev.Compiler.run(Compiler.java:232)
[INFO] at com.google.gwt.dev.Compiler.run(Compiler.java:198)
[INFO] at com.google.gwt.dev.Compiler$1.run(Compiler.java:170)
[INFO] at
com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:88)
[INFO] at
com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:
82)
[INFO] at com.google.gwt.dev.Compiler.main(Compiler.java:177)
---
[INFO] javax.imageio.IIOException: Can't create output stream!
[INFO] at javax.imageio.ImageIO.write(ImageIO.java:1560)
[INFO] at
com.google.gwt.resources.rg.ImageBundleBuilder.createImageBytes(ImageBundleBuilder.java:
558)
[INFO] at
com.google.gwt.resources.rg.ImageBundleBuilder.toPng(ImageBundleBuilder.java:
544)
[INFO] at
com.google.gwt.resources.rg.ImageResourceGenerator.reencodeToTempFile(ImageResourceGenerator.java:
641)
[INFO] at
com.google.gwt.resources.rg.ImageResourceGenerator.prepare(ImageResourceGenerator.java:
567)
[INFO] at
com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator.initAndPrepare(AbstractClientBundleGenerator.java:
1043)
[INFO] at
com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator.initAndPrepare(AbstractClientBundleGenerator.java:
1069)
[INFO] at
com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator.generateIncrementally(AbstractClientBundleGenerator.java:
412)
[INFO] at
com.google.gwt.dev.javac.StandardGeneratorContext.runGeneratorIncrementally(StandardGeneratorContext.java:
647)
[INFO] at
com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:
41)
[INFO] at com.google.gwt.dev.shell.StandardRebindOracle
$Rebinder.rebind(StandardRebindOracle.java:78)
[INFO] at
com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:
268)
[INFO] at
com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:
257)
[INFO] at
com.google.gwt.dev.DistillerRebindPermutationOracle.getAllPossibleRebindAnswers(DistillerRebindPermutationOracle.java:
91)
[INFO] at
com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.doFindAdditionalTypesUsingRebinds(WebModeCompilerFrontEnd.java:
96)
[INFO] at com.google.gwt.dev.jdt.AbstractCompiler$Sandbox
$CompilerImpl.process(AbstractCompiler.java:254)
[INFO] at
org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:444)
[INFO] at com.google.gwt.dev.jdt.AbstractCompiler$Sandbox
$CompilerImpl.compile(AbstractCompiler.java:173)
[INFO] at com.google.gwt.dev.jdt.AbstractCompiler$Sandbox
$CompilerImpl.compile(AbstractCompiler.java:288)
[INFO] at com.google.gwt.dev.jdt.AbstractCompiler$Sandbox
$CompilerImpl.access$400(AbstractCompiler.java:139)
[INFO] at
com.google.gwt.dev.jdt.AbstractCompiler.compile(AbstractCompiler.java:
588)
[INFO] at
com.google.gwt.dev.jdt.BasicWebModeCompiler.getCompilationUnitDeclarations(BasicWebModeCompiler.java:
97)
[INFO] at
com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.getCompilationUnitDeclarations(WebModeCompilerFrontEnd.java:
52)
[INFO] at
com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompiler.java:
569)
[INFO] at
com.google.gwt.dev.jjs.JavaScriptCompiler.precompile(JavaScriptCompiler.java:
33)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:
284)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:
233)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:
145)
[INFO] at com.google.gwt.dev.Compiler.run(Compiler.java:232)
[INFO] at com.google.gwt.dev.Compiler.run(Compiler.java:198)
[INFO] at com.google.gwt.dev.Compiler$1.run(Compiler.java:170)
[INFO] at
com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:88)
[INFO] at
com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:
82)
[INFO] at com.google.gwt.dev.Compiler.main(Compiler.java:177)
[INFO] Caused by: javax.imageio.IIOException: Can't create cache file!
[INFO] at javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:
397)
[INFO] at javax.imageio.ImageIO.write(ImageIO.java:1558)
[INFO] ... 33 more
[INFO] Caused by: java.io.IOException: Too many open files
[INFO] at java.io.UnixFileSystem.createFileExclusively(Native Method)
[INFO] at java.io.File.checkAndCreate(File.java:1704)
[INFO] at java.io.File.createTempFile(File.java:1792)
[INFO] at
javax.imageio.stream.FileCacheImageOutputStream.<init>(FileCacheImageOutputStream.java:
71)
[INFO] at
com.sun.imageio.spi.OutputStreamImageOutputStreamSpi.createOutputStreamInstance(OutputStreamImageOutputStreamSpi.java:
50)
[INFO] at javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:
393)
[INFO] ... 34 more
The alternative is to only put into your bundle the images you actually need.
Paul