2017-09-06 37 views
1

我在測試過程中獲得堆例外:ANT任務maxmemory和通過jvmarg設置堆大小的區別?

[junit] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 

我看了一下multiple解決這個問題,但我很困惑,這是實際的正確方法。在Ant任務,有

<junit fork="true" haltonfailure="no" maxmemory="1024m"> 

和其他人通過ANT_OPTS或通過任務例如爲:

<jvmarg value="-Xmx1024M"> 

難道是多餘的設置這兩個值的建議傳遞參數的選項,例如爲:?如果不是,哪個是推薦的方法?

回答

1

這兩種方法都達到了相同的最終結果,即:您的測試在分叉的JVM中運行,並且該JVM的最大堆大小爲1024mb。

我認爲考慮牢記這些方法之間的艇員選拔的時候有:

  • 將構建腳本的讀/維護者熟悉JVM最大堆「原始」的指令(即-Xmx) ?
  • 您的<junit>任務是否需要多個自定義JVM參數?

如果回答這兩個問題是「是」,那麼你有(一)需要超出通過快捷方式(如maxmemory)支持的JVM指定參數和(b)您可以預期,任何人都讀/保持你的構建腳本可以很容易地看到構建腳本中表達的'原始'JVM參數。這表明<jvmarg>可以用於所有JVM參數。

如果答案是「否」,那麼根本不需要使用<jvmarg>,您可以堅持其友好的快捷方式:maxmemory

換一種方式,以下兩個聲明的功能相同,第一個是,也許簡單:

<junit fork="true" haltonfailure="no" maxmemory="1024m"> 
    ... 
</junit> 


<junit fork="true" haltonfailure="no"> 
    <jvmarg value="-Xmx1024m"> 
    ... 
</junit> 

相比之下,這接下來的兩個聲明也功能相同,但第二個是也許,在這個意義上所有 JVM ARG遊戲以同樣的方式表達更加一致:

<junit fork="true" haltonfailure="no" maxmemory="1024m"> 
    <jvmarg value="-Denv=dev"> 
    ... 
</junit> 


<junit fork="true" haltonfailure="no"> 
    <jvmarg value="-Denv=dev"> 
    <jvmarg value="-Xmx1024m"> 
    ... 
</junit> 

然而,主要的一點是,所有這些方法都功能相同所以它確實是一個偏好問題,也許與您自己項目的約定一致。