簡體   English   中英

Java正在分配額外的2GB內存

[英]Java is Allocating Extra 2gb of Memory

我有一個新的VPS來運行我和一些好友制作的一些java程序。 我用這樣的一行開始這個過程:

java -Xmx512M -jar program.jar

在我們的舊VPS上,您可以使用'top'命令查看正在使用的虛擬和駐留內存量。 它會使用600-700mb的虛擬內存。 現在在我們的新VPS上,使用相同的命令,虛擬內存似乎總是比-Xmx值多出約2GB。 因此,虛擬內存大約在600-700mb左右,而不是2700-3000mb。

舊的VPS運行CentOS 5.7,新的運行CentOS 6.2。 兩者都運行JRE 1.7u3 64bit。

為什么這樣,我該如何解決?

編輯:頂部

PID   USER    PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
27645 pyro    20   0 3003m 270m  10m S  5.0  1.7   1:19.18 java -Xmx512M -jar cserver.jar

另一個編輯:我不懷疑為什么虛擬內存使用的內存比java命令行中指定的多。 我在質疑為什么它比以前使用了更多。

堆不是唯一消耗虛擬內存的東西。 虛擬內存是應用程序具有的地址空間量,而不是它使用的內存量(駐留程序是更好的指標)

虛擬內存包括所有線程堆棧空間,直接內存和內存映射文件。

我要檢查的第一件事是應用程序使用的線程數,線程越多,虛擬內存越多。

虛擬內存使用意味着使用了多少地址空間,並不一定直接轉換為RAM使用。 堆棧,映射文件(包括二進制文件和庫)等都有助於虛擬內存,但並不總是對實際使用的RAM有用。 請注意,您的RES(駐留在RAM中)內存使用量僅為270 MB。 在32位計算機上,您可能會遇到地址空間限制,因此如果接近2 GB標記,則虛擬內存是稀缺資源(該值也可能是1 GB或3 GB,具體取決於操作系統)。 在64位系統上,虛擬內存(地址空間)接近無限制,因此高價值本身不需要被視為風險。 當然,如果它也與實際的高RAM使用率或許多映射文件有關,你無法找到使用它們的原因,那么值得研究。

當然,JVM也有一些實際的開銷(在物理分配的內存中),與垃圾收集器的內務管理,編譯器的工作,本機代碼等有關,這也將反映在虛擬內存使用中。 但由於RES和SHR位置不是很高,我認為沒有理由恐慌,特別是如果你是64位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM