JVM參數設置

個人體會:一般不會涉及到jvm性能調優,除非較大的項目需要,一旦涉及到調優,就不單單是簡簡單單的參數設置,外科手術似的,我們需要觀察項目運行的過程中,內存的消耗,接著可能還會涉及到的代碼層面的調優,到這一步就有點復雜了,涉及到重構和設計模式,這里的調優完全是出于自己想玩一玩。推薦書籍:《深入java虛擬機》、《重構》、《設計模式》等。

1. 設置JVM內存的參數有四個:

-Xmx:?Heap最大值,默認值為物理內存的1/4,最佳設值應該視物理內存大小及計算機內其他內存開銷而定;

-Xms:Heap初始值,Server端JVM最好將-Xms和-Xmx設為相同值,開發測試機JVM可以保留默認值;

-Xmn:Heap Young區大小,不熟悉最好保留默認值;

-Xss:每個線程的Stack大小,不熟悉最好保留默認值;

注一:整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小,-Xmn2g:設置年輕代大小為2G。整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。

注二:JVM調優工具:Jconsole,jProfile,VisualVM

Jconsole : jdk自帶,功能簡單,但是可以在系統有一定負荷的情況下使用。對垃圾回收算法有很詳細的跟蹤。

JProfiler:商業軟件。

VisualVM.exe:JDK自帶,功能強大,與JProfiler類似<在jdk/bin/目錄下>。

注三:java內存結構:


2. 那么我們該如何設置呢?

命令提示符下啟動并使用JVM時(只對當前運行的類Test生效):

java -Xmx128m -Xms64m -Xmn32m -Xss16m Test

當在集成開發環境下(如eclipse)啟動并使用JVM時:

a. 在eclipse根目錄下打開eclipse.ini,默認內容為(這里設置的是運行當前開發工具的JVM內存分配):

-vmargs ?-Xms40m ?-Xmx256m?

-vmargs表示以下為虛擬機設置參數,可修改其中的參數值,也可添加-Xmn,-Xss,另外,eclipse.ini內還可以設置非堆內存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。

此處設置的參數值可以通過以下配置在開發工具的狀態欄顯示:

在eclipse根目錄下創建文件options,文件內容為:org.eclipse.ui/perf/showHeapStatus=true

修改eclipse根目錄下的eclipse.ini文件,在開頭處添加如下內容:

-debug ?options ?-vm ?javaw.exe?

重新啟動eclipse,就可以看到下方狀態條多了JVM信息。

b. 打開eclipse-窗口-首選項-Java-已安裝的JRE(對在當前開發環境中運行的java程序皆生效)

編輯當前使用的JRE,在缺省VM參數中輸入:-Xmx128m -Xms64m -Xmn32m -Xss16m


c. 打開eclipse-運行-運行-Java應用程序(只對所設置的java類生效)

選定需設置內存分配的類-自變量,在VM自變量中輸入:-Xmx128m -Xms64m -Xmn32m -Xss16m

注:如果在同一開發環境中同時進行了b和c設置,則b設置生效,c設置無效,如:

開發環境的設置為:-Xmx256m,而類Test的設置為:-Xmx128m -Xms64m,則運行Test時生效的設置為:

-Xmx256m -Xms64m



(3)當在服務器環境下(如Tomcat)啟動并使用JVM時(對當前服務器環境下所以Java程序生效):

a. 設置環境變量:

變量名:CATALINA_OPTS

變量值:-Xmx128m -Xms64m -Xmn32m -Xss16m

b. 打開Tomcat根目錄下的bin文件夾,編輯catalina.bat,將其中的%CATALINA_OPTS%(共有四處)替換為:-Xmx128m -Xms64m -Xmn32m -Xss16m

3. 查看設置JVM內存信息

Runtime.getRuntime().maxMemory();? //最大可用內存,對應-Xmx

Runtime.getRuntime().freeMemory();? //當前JVM空閑內存

Test截圖,有點丑將就著看:

結果:

Runtime.getRuntime().totalMemory();? //當前JVM占用的內存總數,其值相當于當前JVM已使用的內存及freeMemory()的總和

關于maxMemory(),freeMemory()和totalMemory():

maxMemory()為JVM的最大可用內存,可通過-Xmx設置,默認值為物理內存的1/4,設值不能高于計算機物理內存;

totalMemory()為當前JVM占用的內存總數,其值相當于當前JVM已使用的內存及freeMemory()的總和,會隨著JVM使用內存的增加而增加;

freeMemory()為當前JVM空閑內存,因為JVM只有在需要內存時才占用物理內存使用,所以freeMemory()的值一般情況下都很小,而JVM實際可用內存并不等于freeMemory(),而應該等于maxMemory()-totalMemory()+freeMemory()。及其設置JVM內存分配。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容