2011-08-16 136 views
5

你有什麼想法,爲什麼我可以得到一個'線程中的異常'主要「java.lang.OutOfMemoryError:Java堆空間'錯誤時,構建我的android應用程序,即使我添加了-vmargs -Xmx1024M -Xms512M到eclipse的參數? 我想知道在構建時會發生什麼樣的錯誤會觸發這樣的錯誤,因爲在我看來,只有Eclipse或Maven中的錯誤才能在構建時產生這樣的錯誤。 我使用run作爲maven install來構建我的應用程序(使用maven android eclipse插件)。運行as->'maven package'也會在等待大約1分鐘30後產生相同的構建失敗。 我有一臺帶有3GB內存的臺式電腦,而我的應用程序幾乎沒有那麼大。java堆空間

謝謝。

+0

你在你的應用中使用了任何位圖功能嗎? –

+0

是的,他是,我是 – Moussa

回答

8

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path添加到您的jvm參數中,以便在內存不足時將其轉儲出堆。然後,您可以使用Eclipse Memory Analyserjhat瀏覽堆並診斷問題出在哪裏。

更新:嘗試增加你的maven android插件的內存。在你pom.xml,爲Xmx JVM添加一個參數插件配置:

<plugin> 
    <artifactId>maven-android-plugin</artifactId> 
    <configuration> 
    <jvmArguments> 
     <argument>-Xmx1500m</argument> 
    </jvmArguments> 
    </configuration> 
</plugin> 
+0

對不起,我無法設法轉儲堆。這些參數是否應該插入到與eclipse中'run configuration'的'VM arguments'文本框相同的位置,如下所示:-Xms1024M -Xmx1024M -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath =「C:」? – John156

+0

@ John156看到我的更新增加內存的插件 – dogbane

+0

噢,我的上帝,非常感謝你!我一直在努力解決這個問題。我可以簡單地解釋爲什麼這會起作用,爲什麼它們使用單​​獨的jvms,爲什麼調用進程(eclipse,jre,...)的參數不會自動設置爲子進程? – John156

2

您的Eclipse JVM參數並不重要。你必須增加編譯器的堆。

我引述http://javahowto.blogspot.com/2006/06/fix-javac-java-lang-outofmemoryerror.html

If [...] you're running Eclipse, go into your "run As" dialog for your Build.xml and add -Xms256m -Xmx256m to the "VM Arguments" text box

+0

這太聰明瞭,以至於一段時間真的以爲它會解決我的問題。我不知道eclipse的JVM與編譯器的JVM不同。所以我們很清楚,我所做的就是點擊運行箭頭,然後運行配置,然後選擇我的運行配置,然後進入JRE選項卡,在'VM arguments'空白文本框中添加'-Xms1024M - Xmx1024M',然後申請並運行。 這很不幸沒有奏效,問題仍然是一樣的。 – John156

+0

是的,因爲我現在意識到您正在使用Maven的Android插件及其Eclipse集成。這意味着Eclipse編譯器設置無關緊要,而是插件的設置。 –

0

如果增加沒有響應,那麼我建議你檢查你寫的每個類的行數。如果有很多對象試圖對方法進行分區和/或將它們複製到新類中(如果一個或多個類具有3000多行),那麼這可能是一個編譯器問題。

1

我遇到過這種轉換爲Dalvik格式失敗:無法執行dex:Java堆空間。增加eclipse.ini文件中的所有值都沒有幫助。在我將ADT插件從12升級到16後,發生了這種情況。我在升級之前更改了指向我現有項目的Android SDK(從我以前的adt中連接的android sdks中將它們更改爲android sdks這是連接到我的新adt),它解決了我的問題。希望這可以幫助。如果它可以幫助別人,請爲此加1。