為什麼我設定的虛擬機器引數不起作用?
阿新 • • 發佈:2018-11-20
最近在使用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開發。。。。。。