2012-09-16 53 views
2

我遇到了問題。我的程序真的很大,Java拋出OutOfMemoryException。 在.bat文件,我有以下幾點:64位jvm上的Java內存不足

java -server -Dfile.encoding=UTF-8 -Xmx1500m -Xbootclasspath/p:../libs/l2ft.jar -cp config/xml;../libs/*; l2ft.gameserver.GameServer 

的Java使用6 GB我的內存中,不使用接下來的6 GB。我輸入System.getProperty("sun.arch.data.model");,它說我使用的是64位JVM。

+0

嘗試增加Xmx(最大堆)。你目前的設置是一個不到1.5GB的。 –

+0

你怎麼知道它使用6GB的RAM?以及「未使用下一個6 GB」是什麼意思? – Vikdor

回答

4

您已將最大堆大小設置爲1500m,而JVM可以使用比〜200 MB多一點的數據,這就是您將進程限制在的所有內容。

試着改爲將進度限制在5 GB左右。 (您想離開架空一些內存和操作系統)

-mx5g 
+0

現在它的工作很好,thx很多^^ – user1656546

0

Xbootclasspath此之前,請選項:

java -XX:MaxPermSize=512m -server -Dfile.encoding=UTF-8 -Xmx8g -XX:+UseCompressedOops 

這將使使用更多的內存,也將確保它使用盡可能少儘可能在內存中尋址64位機器中的對象。

-XX:MaxPermSize=512m使燙髮寶石空間更大(當使用大量堆內存時,您可能需要使用這個空間),並且-XX:+UseCompressedOops將使其使用32位尋址而不是64位,因爲8gb堆可以使用32位進行正確的尋址,所以它使您使用較少的內存來分配對象。

+0

我很好奇,爲什麼這得到downvoted?這個答案有什麼問題嗎? – LanguagesNamedAfterCofee

+0

誰知道?還有一個答案也是正確的,並得到了低估。看起來所有者刪除了它。 –

+0

恕我直言,在這種情況下設置MaxPermSize有點過早opitimization。目前沒有跡象表明,主題發起人患有不足的PermGen。 – Nikem