2009-09-29 45 views

回答

82

使用參數-Xms<memory>-Xmx<memory>。分別用於指示Megs和Gig字節的數字後面使用MG-Xms表示最小值和-Xmx的最大值。

+1

你可能也想看看MaxPermSize。 – pmu 2009-09-30 00:36:01

+54

他詢問JVM內存。你所說的是堆的大小。它們都不同 – vsingh 2013-01-31 19:06:42

+6

要重新提供其他評論提到的內容,Xms和Xmx僅配置堆。雖然配置這些變量對非堆空間有間接影響,但是提出問題的人試圖確定是否有方法來配置總內存使用量(堆+非堆) – murungu 2014-03-03 16:08:48

26

你不應該擔心棧泄漏內存(這是非常罕見的)。唯一一次可以讓堆棧失去控制的是無限的(或者非常深的)遞歸。

這只是堆。對不起,一開始沒有完全讀你的問題。

您需要使用以下命令行參數運行JVM。

-Xmx<ammount of memory> 

實施例:

-Xmx1024m 

這將允許的存儲器爲JVM 1GB的最大值。

+0

這是不正確的,根據這個線程,有多種方法可以泄漏到堆外部http://stackoverflow.com/questions/1475290/java-memory-mystery-do-i-have-a-leak – erotsppa 2009-09-29 18:31:53

+0

你是對的,有很多方法可以解決與堆棧無關的內存問題。但是,它們並不常見。 – jjnguy 2009-09-29 18:37:25

+5

很確定你無法控制非堆內存大小,你能嗎? – 2009-09-29 19:17:38

9

上面的答案是正確的,你不能優雅地控制java進程分配多少本地內存。這取決於你的應用程序在做什麼。

也就是說,根據平臺的不同,您可能可以使用某種機制,例如ulimit來限制java或任何其他進程的大小。

只是不要指望它如果達到這個限制就會優雅地失敗。本地內存分配失敗比Java堆上的分配失敗更難處理。應用程序崩潰的可能性相當大,但取決於系統對於保持適合您的進程大小有多關鍵。

2

的NativeHeap可以通過-XX被increasded:MaxDirectMemorySize = 256M (默認爲128)

我從來沒有使用過。也許你會發現它很有用。

+1

我懷疑op是否想要這樣:當你從java調用C/C++代碼時使用本地內存。 – 2013-05-20 08:59:38

+4

如果您使用直接內存分配緩衝區,則在進行nio調用時也會使用本地內存。 (...和類加載器,以及線程信息....) – stu 2014-03-07 15:07:07

10

如果要限制對JVM內存(不是堆的大小) 的ulimit -v

要獲取JVM和堆內存之間的差異的想法,看看這個優秀的文章 http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html

+6

'ulimit'是一個Linux命令嗎?我做了一個快速的Google搜索,沒有看到'ulimit'和JVM之間的任何關係。是 – Sam 2015-05-26 04:09:28

+0

是的,它是linux命令。 http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/x4733.html – vsingh 2017-05-15 02:41:23