我试图通过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,我该如何解决这个问题?
答案 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)
好的,这是由项目开发人员解决的,希望没有人会再遇到这个问题了。