升级到Dojo 1.7.3之后,由于内存不足错误,我们的ant构建在Dojo的早期版本上可以正常使用多年,现在完全无法运行:

[java] starting writing resources...
[java] java.lang.OutOfMemoryError: GC overhead limit exceeded
[java]     at org.mozilla.javascript.Interpreter.getArgsArray(Interpreter.java:4623)
[java]     at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:3335)
[java]     at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2484)
[java]     at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
[java]     at org.mozilla.javascript.NativeArray.iterativeMethod(NativeArray.java:1565)
[java]     at org.mozilla.javascript.NativeArray.execIdCall(NativeArray.java:313)
[java]     at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:127)
[java]     at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:3335)
[java]     at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2484)
[java]     at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
[java]     at org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2347)
[java]     at org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:272)
[java]     at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:127)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76)
[java]     at org.mozilla.javascript.gen.c1._c62(Unknown Source)
[java]     at org.mozilla.javascript.gen.c1.call(Unknown Source)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
[java]     at org.mozilla.javascript.gen.c1._c69(Unknown Source)
[java]     at org.mozilla.javascript.gen.c1.call(Unknown Source)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
[java]     at org.mozilla.javascript.gen.c1._c40(Unknown Source)
[java]     at org.mozilla.javascript.gen.c1.call(Unknown Source)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
[java]     at org.mozilla.javascript.gen.c1._c42(Unknown Source)
[java]     at org.mozilla.javascript.gen.c1.call(Unknown Source)
[java]     at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:3335)
[java]     at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2484)
[java]     at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
[java]     at org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2347)
[java]     at org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:272)
[java]     at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:127)
[java]     at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76)
[java] js: exception from uncaught JavaScript throw: java.lang.OutOfMemoryError: GC overhead limit exceeded

我已经广泛记录了我们的麻烦here

特别要注意的是:



更新1

我也尝试过:
<jvmarg value="-Xms5120m"/>
<jvmarg value="-Xmx5120m"/>

还要在ant java任务本身上使用maxmemory设置。

最佳答案

终于找到了问题,releaseDir开关值同时具有Windows和Unix文件分隔符。过去在Dojo
在解决了问题中的ant token 后,releaseDir混合了unix和Windows文件分隔符:

<arg value="releaseDir=${output.dir}/path/foo/bar" />
-> Became ->
releaseDir=blah\blah\blah/path/foo/bar

这足以使构建锁定在“写入资源”上,然后由于“堆空间不足”而崩溃。 (这是Java通常处理的问题)。

修复非常简单:
<path id="dojo.output.tmp">
    <pathelement location=" ${output.dir}/path/foo/bar "/>
</path>

<pathconvert targetos="unix" property="dojo.output.dir" refid="dojo.output.tmp" />
...
<arg value="releaseDir=${dojo.output.dir}" />

09-28 13:11
查看更多