2012-09-13 46 views
3

我創建了一個Java應用程序,許多用戶使用它。我曾在一個exe文件中捆綁的應用程序,它正在運行使用此命令:使用-Xmx內存參數可能會導致錯誤「無法創建Java虛擬機」

Java的罐子-Xms256m -Xmx1024m MyApplication.jar

我用這高「-Xmx」值,因爲有時應用程序可能需要高內存才能工作,或者可能會導致「內存不足」錯誤。

對於我來說,該應用程序運行良好,因爲我有3GB Rams,但許多其他用戶在啓動時出現「無法創建Java虛擬機」的錯誤,因爲它們的內存很低:1.5GB或2GB。

我在這裏卡住了2個錯誤之間「出的內存」和「無法創建Java虛擬機」!

是否有一個java參數保留1024內存,如果這個內存可用,如果沒有,然後保留它可以在需要時最大內存?

+0

提供操作系統(Windows/linux,64位/ 32位)和Java(64位/ 32位)版本以使問題具體化。 – randominstanceOfLivingThing

+1

在32位Windows機器上,JVM大小有嚴格的限制。使用64位Windows或使用Linux。 – bmargulies

回答

1

我不相信有。

你所面臨的更大的問題是,如果你走出記憶,當你設置的XMX下(即在同一XMX提供給其他用戶),那麼他們將得到內存的,所以你沒有通過允許他們設置一個更低的Xmx來真正幫助任何事情。

我認爲最簡單的答案就是您需要爲運行程序設置一些最低內存要求。

+0

不幸的是,這是唯一可以使用的實用解決方案。 – Brad

+0

我已經看到了一個Java應用程序,它允許用戶手動設置內存分配,但我不知道它們是如何實現的:http://minecraftmine.org/wp-content/uploads/2012/01/Magic-Launcher巴紐 – Brad

4

要麼你需要1 GB,要麼你不需要。

如果你想要使用更多的內存,如果它可用,我會嘗試使用默認最多爲主內存的1/4的JVM的-server。它還可以使運行速度更快的程序更快。 ;)

你的情況,它將使最大堆(不是總內存)是

1.5 GB -> 0.38 GB 
2 GB -> 0.5 GB 
3.5 GB -> 0.88 GB 

這可能是足夠接近。你也可以考慮使用非堆內存,因爲這可以給你更多的選擇,你如何使用你的內存。

順便說一句:4 GB的內存可以低於20美元。 :P

+0

我同意彼得,你必須設置一些運行你的應用程序的最低要求。通過瀏覽您的應用程序並確定是否可以減少大量內存使用量,您很可能會降低此要求。最終,這歸結於你的程序在做什麼以及對內存的要求如何:對於內存來說,1-2GB是非常低的,因爲即使是最低端的品牌機器也有4+以上,你可以購買高質量的臺式機內存也便宜。 (認爲​​16GB爲100美元) –

+0

我可以以49英鎊的價格購買16 GB的內存,但我懷疑內存大小是3.5 GB,但它運行的是32位Windows XP或類似內存。 –

+0

啊是的,對於〜3GB是有意義的,但對於運行在1GB標記中的用戶,最終他們必須明白,1GB的系統總內存對於運行的應用程序來說可能是完美的,並且處理90年代的需求只是不會削減它爲今天的應用。至於成本,100美元來自大約一年前,看到它不斷下降,一如既往驚人。 –

0

Java虛擬機需要在Windows中有一個contiguous allocation內存。如果RAM是2GB,並且它可能沒有足夠的1GB的contiguous block of memory,那麼就是錯誤。

+0

@Downvoter你可以添加你的評論,爲什麼它downvoted? –

相關問題