1. 程式人生 > >為什麼我設定的虛擬機器引數不起作用?

為什麼我設定的虛擬機器引數不起作用?

最近在使用spring cloud做微服務架構,然後spring boot打成jar包執行,發現佔用的記憶體過大,基本上都在1.2G~1.5G之間。

然後很多服務都部署在一臺伺服器上,導致各種服務佔用的記憶體太大,而相互擠佔,經常有服務掉線。

為此,我想給虛擬機器加引數設定堆記憶體大小,然後隨手一百度,就寫出了下面的命令:

錯誤的寫法:

java -jar  xxx.jar -Xms256m -Xmx512m -Xmn128m &

程式算是跑起來了,top一下,發現佔的記憶體還是那麼大。

思忖一下,什麼垃圾虛擬機器,老子設個引數都沒用,害人精。

後來google了一下,其實這個問題不怎麼好google,你的注意提問內容。

然後在StackOverflow找到了如下回答,醍醐灌頂啊。

雖然這個回答和設定對記憶體大小沒什麼相關,但是很有用,大體翻譯一下就是:

執行的-jar xxx.jar後面的引數,都是屬於jar所代表的應用,而不是屬於虛擬機器。

像-Xms,-Xmx這種引數都是屬於虛擬機器的,而不是屬於jar所代表的應用,被我自己蠢哭了。

正確的寫法:

java -Xms256m -Xmx512m -Xmn128m -jar  xxx.jar &

 

-jar之前的引數都屬於虛擬機器,而jar包後面的引數都屬於java應用。

也只有虛擬機器這種,程序內執行運用才會有這種奇葩情況了。 

枉稱java開發。。。。。。