2008-12-10 77 views
2

我在使用jdk 1.5.0_11在Linux下編譯ant時編譯了一個java.lang.OutOfMemoryError:PermGen錯誤。同一個項目在windows下編譯沒有問題。在Ant任務任務中處理PermGen錯誤

通常這與分配給JVM的MaxPermSize有關。伊拉克利Nadareishvili有best explanations of PermGen errors之一,並引導設置Java HotSpot VMOptions(如-XX:MaxPermSize參數= 128M)

在這種情況下,我很快就縮小了問題到特定bpelc ant任務現在

<bpelc input="${build.dir}/bpel/bpel.xml" 
out="${build.dir}/output" rev="${version}" home="${bpel.home}"/> 

我不要認爲bpelc需要像javac這樣的compilerarg元素:

<javac srcdir="${src.dir}" 
     destdir="${classes.dir}" 
     classpathref="libraries"> 
    <compilerarg value="-XX:MaxPermSize=128M"/> 
    </javac> 

那麼如何解決bpelc任務的錯誤?到目前爲止我所提出的最佳解決方案是設置ANT_OPTS環境變量。這似乎避免了迄今爲止的問題。

export ANT_OPTS=-XX:MaxPermSize=128m 

任何人都可以釋放更多的光線嗎?這是一個確定的解決辦法嗎?

回答

2

bpelc任務在運行ant的原始JVM中執行時,則設置ANT_OPTS(或其他類似的東西)是唯一可行的解​​決方案。

一個這樣的等價物可能是將該任務重構爲第二個ant構建文件並使用單獨的JVM運行該任務。不是很好,但取決於你的環境,它可能更容易實現。

+0

@saua感謝您的加固!如果我們再次遇到PermGen問題,我認爲您的重構建議將是下一步。 – tardate 2008-12-11 01:40:26