Closure Compiler(ccjs)内存不足错误

时间:2014-11-07 17:37:29

标签: javascript google-closure-compiler

我试图通过node package manager安装Closure Compiler来减少我的javascript代码(有172k行),但它失败并且出现内存错误":

$ ccjs ./static/ui.jsexe/all.js --compilation_level=ADVANCED_OPTIMIZATIONS > ./static/ui.jsexe/all.min.js                                                                              
java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:2245)
        at java.util.Arrays.copyOf(Arrays.java:2219)
        at java.util.ArrayList.grow(ArrayList.java:213)
        at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:187)
        at java.util.ArrayList.add(ArrayList.java:411)
        at com.google.javascript.jscomp.parsing.NewIRFactory.<init>(NewIRFactory.java:241)
        at com.google.javascript.jscomp.parsing.NewIRFactory.transformTree(NewIRFactory.java:289)
        at com.google.javascript.jscomp.parsing.ParserRunner.parse(ParserRunner.java:106)
        at com.google.javascript.jscomp.JsAst.parse(JsAst.java:84)
        at com.google.javascript.jscomp.JsAst.getAstRoot(JsAst.java:50)
        at com.google.javascript.jscomp.CompilerInput.getAstRoot(CompilerInput.java:118)
        at com.google.javascript.jscomp.Compiler.hoistNoCompileFiles(Compiler.java:1500)
        at com.google.javascript.jscomp.Compiler.parseInputs(Compiler.java:1404)
        at com.google.javascript.jscomp.Compiler.parse(Compiler.java:788)
        at com.google.javascript.jscomp.Compiler.compileInternal(Compiler.java:743)
        at com.google.javascript.jscomp.Compiler.access$000(Compiler.java:93)
        at com.google.javascript.jscomp.Compiler$3.call(Compiler.java:655)
        at com.google.javascript.jscomp.Compiler$3.call(Compiler.java:652)
        at com.google.javascript.jscomp.Compiler$4.call(Compiler.java:699)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)

我的机器上有16 GB,我该如何解决这个问题?


2 个答案:

答案 0 :(得分:0)

看起来会是https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/NewIRFactory.java#L245 - 它用文件中每个换行符的索引填充ArrayList,因此单独列表的大小为172K。

但是,如果您在将所有JS传递到Closure Compiler之前将其放在一个文件中,您可以考虑通过在命令行上传递单个文件来跳过该连接并让Closure Compiler这样做({ {1}})或使用&#34; glob&#34; (... --js=file1.js --js=file2.js)。然后它可以分别解析每个应该使用更少内存的文件。

或者,您可以使用Xmx option

增加JVM使用的最大内存

答案 1 :(得分:0)

好的,这是由项目开发人员解决的,希望没有人会再遇到这个问题了。

https://github.com/dcodeIO/ClosureCompiler.js/issues/19