日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

深入理解Java虚拟机-常用vm参数分析

發布時間:2025/3/20 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解Java虚拟机-常用vm参数分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java虛擬機深入理解系列全部文章更新中…

  • 深入理解Java虛擬機-Java內存區域透徹分析
  • 深入理解Java虛擬機-常用vm參數分析
  • 深入理解Java虛擬機-JVM內存分配與回收策略原理,從此告別JVM內存分配文盲
  • 深入理解Java虛擬機-如何利用JDK自帶的命令行工具監控上百萬的高并發的虛擬機性能
  • 深入理解Java虛擬機-如何利用VisualVM對高并發項目進行性能分析
  • 深入理解Java虛擬機-你了解GC算法原理嗎

話不多說,今天就分析一下一些常用的Java虛擬機的參數設置,以及如何更好的使用!

1 JVM參數簡介

首先想說的是其實這些參數我們并不是陌生的,在平時的開發和使用中經常都會遇到,只是在平時缺少一個比較系統的總結,所以,對這些參數感覺是很陌生的,所以,通過這篇文章的總結,我相信你一定都會對這些參數熟稔于心,做做心中有數。

在Java虛擬機的參數中,其實可以把這些參數分為三類,當然,這是針對JDK1.6來說的,如果對于JDK1.8,那么就不是這么分類的了,但是,由于這兩個版本很多常用的參數的差別是不大的,所以這篇文章就先介紹JDK1.6的VM參數。

主要可以分為以下三類:

  • 標準參數(-),所有的JVM實現都必須實現這些參數的功能,而且向后兼容。
  • 非標準參數(-X),默認JVM實現這些參數的功能,但是并不保證所有JVM實現都滿足,且不保證向后兼容。
  • 非Stable參數(-XX),此類參數各個JVM實現會有所不同,將來可能會隨時取消,需要慎重使用。

雖然是這么分類的,實際上呢,非標準參數和非穩定的參數實際的使用中還是用的非常的多的,在后面的文章的介紹中你就會發現。

2 標準參數

這一類參數可以說是我們剛剛開始Java是就用的非常多的參數了,比如java -version、java -jar等等,我們在CMD中輸入java -help就可以獲得Java當前版本的所有標準參數了。

如上圖就是JDK1.8的所有標準參數了,下面我們將介紹一些我們會用的比較多的參數。

  • -client

以client模式啟動JVM,這種方式啟動速度快,但運行時性能和內存管理效率不高,適合客戶端程序或者開發調試。

  • -server

以server模式啟動JVM,與client情況恰好相反。適合生產環境,適用于服務器。64位的JVM自動以server模式啟動。

  • -classpath或者-cp

通知JVM類搜索路徑。如果指定了-classpath,則JVM就忽略CLASSPATH中指定的路徑。各路徑之間以分號隔開。如果-classpath和CLASSPATH都沒有指定,則JVM從當前路徑尋找class。

JVM搜索路徑的順序:

1.先搜索JVM自帶的jar或zip包。

Bootstrap,搜索路徑可以用System.getProperty("sun.boot.class.path")獲得;

2.搜索JRE_HOME/lib/ext下的jar包。

Extension,搜索路徑可以用System.getProperty("java.ext.dirs")獲得;

3.搜索用戶自定義目錄,順序為:當前目錄(.),CLASSPATH,-cp。

搜索路徑用System.getProperty("java.class.path")獲得。

System.out.println(System.getProperty("sun.boot.class.path")); System.out.println(System.getProperty("java.ext.dirs")); System.out.println(System.getProperty("java.class.path"));

如上就是我電腦的JVM的路徑。

  • -DpropertyName=value

定義系統的全局屬性值,如配置文件地址等,如果value有空格,則需要使用雙引號。

另外用System.getProperty("hello")可以獲得這些定義的屬性值,在代碼中也可以用System.setProperty("hello","world")的形式來定義屬性。

如鍵值對設置為hello=world。

System.out.println(System.getProperty("hello"));

運行結果就是:

  • -verbose

查詢GC問題最常用的命令之一,參數如下:
-verbose:class
輸出JVM載入類的相關信息,當JVM報告說找不到類或者類沖突時可此進行診斷。
-verbose:gc
輸出每次GC的相關情況。
-verbose:jni
輸出native方法調用的相關情況,一般用于診斷jni調用錯誤信息。

另外,控制臺輸出GC信息還可以使用如下命令:

在JVM的啟動參數中加入-XX: PrintGC -XX: PrintGCDetails -XX: PrintGCTimeStamps -XX: PrintGCApplicationStoppedTime,按照參數的順序分別輸出GC的簡要信息,GC的詳細信息、GC的時間信息及GC造成的應用暫停的時間。

3 非標準參數

非標注的參數主要是關于Java內存區域的設置參數,所以在看這些參數之前,應該先查看Java內存區域的基礎知識,可以查看這篇文章:深入理解Java虛擬機-Java內存區域透徹分析。

非標準參數實在標準參數的基礎上的一些擴充參數,可以輸入java -X,獲得當前JVM支持的非標準參數。

從圖片中可以看出來,這些非標準的參數其實不多的,下面我們再 講解一些比較常用的參數。

  • -Xmn

新生代內存大小的最大值,包括E區和兩個S區的總和。設置方法:-Xmn512m、-Xmn2g。

  • -Xms

初始堆的大小,也是堆大小的最小值,默認值是總共的物理內存/64(且小于1G)。默認情況下,當堆中可用內存小于40%,堆內存會開始增加,一直增加到-Xmx的大小。

  • -Xmx

堆的最大值,默認值是總共的物理內存/64(且小于1G),默認情況下,當堆中可用內存大于70%,堆內存會開始減少,一直減小到-Xms的大小。

因此,為了避免這種浮動,所以在設置-Xms和-Xmx參數時,一般會設置成一樣的,能夠提高性能。

另外,官方默認的配置為年老代大小:年輕代大小=2:1左右,使用-XX:NewRatio可以設置年老代和年輕代之比,例如,-XX:NewRatio=4,表示年老代:年輕代=4:1

參數實例

設置-Xms、-Xmn和-Xmx參數分別為-Xms512m -Xmx512m -Xmn128m。同時設置新生代和老生代之比為1:4,E:S0:S1=8:1:1。

*** @ClassName MethodTest* @Description vm參數設置:-Xms512m -Xmx512m -Xmn128m -XX:NewRatio=4 -XX:SurvivorRatio=8 * @Author 歐陽思海* @Date 2019/11/25 20:06* @Version 1.0**/public class MethodTest {public static void main(String[] args) {List<String> list = new ArrayList<String>();long i = 0;while (i < 1000000000) {System.out.println(i);list.add(String.valueOf(i ).intern());}} }

運行之后,用VisualVM查看相關信息是否正確。

當我們沒有設置-XX:NewRatio=4 -XX:SurvivorRatio=8時,使用官方默認的情況如下:

上圖可以看出,新生代(Eden Space Survivor 0 Survivor 1):老年代(Old Gen)≈ 1:2。

當我們設置了-XX:NewRatio=4 -XX:SurvivorRatio=8時,情況如下:

變成了新生代(Eden Space Survivor 0 Survivor 1):老年代(Old Gen)≈ 1:4,Eden Space:Survivor 0: Survivor 1 = 8:1:1。

從上圖可知,堆的信息是正確的。

  • -Xss

設置每個線程的棧內存,默認1M,一般來說是不需要改的。

  • -Xprof

跟蹤正運行的程序,并將跟蹤數據在標準輸出輸出;適合于開發環境調試。

  • -Xnoclassgc

禁用類垃圾收集,關閉針對class的gc功能;因為其阻止內存回收,所以可能會導致OutOfMemoryError錯誤,慎用。

  • -Xincgc

開啟增量gc(默認為關閉);這有助于減少長時間GC時應用程序出現的停頓;但由于可能和應用程序并發執行,所以會降低CPU對應用的處理能力。

  • -Xloggc:file

與-verbose:gc功能類似,只是將每次GC事件的相關情況記錄到一個文件中,文件的位置最好在本地,以避免網絡的潛在問題。
若與verbose命令同時出現在命令行中,則以-Xloggc為準。

  • -Xint

在解釋模式(interpreted mode)下,-Xint標記會強制JVM執行所有的字節碼,這會降低運行速度,通常低10倍或更多。

  • -Xcomp

-Xcomp參數與它(-Xint)正好相反,JVM在第一次使用時會把所有的字節碼編譯成本地代碼,從而帶來最大程度的優化。

然而,很多應用在使用-Xcomp也會有一些性能損失,當然這比使用-Xint損失的少,原因是-xcomp沒有讓JVM啟用JIT編譯器的全部功能。JIT編譯器可以對是否需要編譯做判斷,如果所有代碼都進行編譯的話,對于一些只執行一次的代碼就沒有意義了。

  • -Xmixed

-Xmixed是混合模式,這是JVM默認的模式,也是推薦使用的模式。將解釋模式與編譯模式進行混合使用,由JVM自己決定。

4 非Stable參數

這類參數你一看官網以為不能使用呢,官網給你的建議就是這些參數不穩定,慎用,其實這主要的原因還是因為每個公司的實現都是不一樣的,所以就是導致不穩定。但是呢,在實際的使用中卻是非常的多的,而且這部分的參數很重要。

這些參數大致可以分為三類:

  • 性能參數(Performance Options):用于JVM的性能調優和內存分配控制,如初始化內存大小的設置;
  • 行為參數(Behavioral Options):用于改變JVM的基礎行為,如GC的方式和算法的選擇;
  • 調試參數(Debugging Options):用于監控、打印、輸出等jvm參數,用于顯示jvm更加詳細的信息;

下面還是先羅列一些比較常用的參數,其實,這些文章很多了,這里主要還是做一個總結,以后自己看文章的時候比較方便,如果有同行看到了文章,你可以參考參考,還是很有幫助的。

另外,選取其中的一些參數做一些例子來解釋,這樣也能夠更加的形象。

注意:以下參數都是JDK1.7及以下可以使用。

  • 性能參數
參數及其默認值描述
-XX:LargePageSizeInBytes=4m設置用于Java堆的大頁面尺寸
-XX:MaxHeapFreeRatio=70GC后java堆中空閑量占的最大比例
-XX:MinHeapFreeRatio=40GC后java堆中空閑量占的最小比例
-XX:MaxNewSize=size新生成對象能占用內存的最大值
-XX:MaxPermSize=64m老生代對象能占用內存的最大值
-XX:NewRatio=2新生代內存容量與老生代內存容量的比例
-XX:NewSize=2.125m新生代對象生成時占用內存的默認值
-XX:ReservedCodeCacheSize=32m保留代碼占用的內存容量
-XX:ThreadStackSize=512設置線程棧大小,若為0則使用系統默認值
-XX: UseLargePages使用大頁面內存
  • 行為參數
參數及其默認值描述
-XX: ScavengeBeforeFullGC新生代GC優先于Full GC執行
-XX: UseGCOverheadLimit在拋出OOM之前限制jvm耗費在GC上的時間比例
-XX:-UseParNewGC打開此開關,使用ParNew Serial Old收集器
-XX:-UseConcMarkSweepGC使用ParNew CMS Serial Old收集器對老生代采用并發標記交換算法進行GC
-XX:-UseParallelGC啟用并行GC,使用ParallelScavenge Serial Old收集器
-XX:-UseParallelOldGC對Full GC啟用并行,當-XX:-UseParallelGC啟用時該項自動啟用,ParallelScavenge Parallel Old收集器
-XX:-UseSerialGC啟用串行GC
-XX: UseG1GC使用垃圾優先(G1)收集器
-XX:SurvivorRatio=nEden區域與Survivor區域大小之比。預設值為8
-XX:PretenureSizeThreshold=n直接晉升到老年代的對象大小,設置這個參數之后,大于這個參數的對象直接進入到老年代分配
-XX:MaxTenuringThreshold=n晉升到老年代的對象年齡,每個對象在堅持過一次Minor GC之后,年齡加1,當超過這個值之后就進入老年代。預設值為15
-XX: UseAdaptiveSizePolicy動態調整Java堆中各個區域的大小以及進入老年代的年齡
-XX:ParallelGCThreads=n設置并行收集器收集時使用的CPU數。并行收集線程數
-XX:MaxGCPauseMillis=n設置并行收集最大暫停時間
-XX:GCTimeRatio=n設置垃圾回收時間占程序運行時間的百分比。公式為1/(1 N)
-XX: UseThreadPriorities啟用本地線程優先級
-XX:-DisableExplicitGC禁止調用System.gc();但jvm的gc仍然有效
-XX: MaxFDLimit最大化文件描述符的數量限制

前面6個參數都是關于垃圾收集器的行為參數,也是經常會用到的參數。

  • 調試參數
參數及其默認值描述
-XX:-CITime打印消耗在JIT編譯的時間
-XX:ErrorFile=./hs_err_pid<pid>.log保存錯誤日志或者數據到文件中
-XX:HeapDumpPath=./java_pid<pid>.hprof指定導出堆信息時的路徑或文件名
-XX:-HeapDumpOnOutOfMemoryError當首次遭遇OOM時導出此時堆中相關信息
-XX:OnError="<cmd args>;<cmd args>"出現致命ERROR之后運行自定義命令
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>"當首次遭遇OOM時執行自定義命令
-XX:-PrintClassHistogram遇到Ctrl-Break后打印類實例的柱狀信息,與jmap -histo功能相同
-XX:-PrintConcurrentLocks遇到Ctrl-Break后打印并發鎖的相關信息,與jstack -l功能相同
-XX:-PrintCommandLineFlags打印在命令行中出現過的標記
-XX:-PrintCompilation當一個方法被編譯時打印相關信息
-XX:-PrintGC每次GC時打印相關信息
-XX:-PrintGCDetails每次GC時打印詳細信息
-XX:-PrintGCTimeStamps打印每次GC的時間戳
-XX:-TraceClassLoading跟蹤類的加載信息
-XX:-TraceClassLoadingPreorder跟蹤被引用到的所有類的加載信息
-XX:-TraceClassResolution跟蹤常量池
-XX:-TraceClassUnloading跟蹤類的卸載信息
-XX:-TraceLoaderConstraints跟蹤類加載器約束的相關信息

5 JDK8的VM參數

由于考慮到現在JDK8用的非常的廣泛,所以,接下來總結一些JDK8會使用到的參數。

查看這篇JDK8的參數文章你會發現,標準參數和非標準參數JDK8的差別并不是很大,如果有其他的參數需要使用,可以查看上面這篇文章。

1、原創不易,老鐵,文章需要你的 點贊 讓更多的人看到,希望能夠幫助到大家!

2、文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關注我的微信公眾號好好學java,公眾號已有 6W 粉絲,回復:1024,獲取公眾號的大禮包,公眾號長期發布 Java 優質系列文章,關注我們一定會讓你收獲很多!

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的深入理解Java虚拟机-常用vm参数分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产三级第一页 | 黄色片网站国产 | 亚洲丝袜在线视频 | 欧美成人黄色小视频 | 99re免费视频精品全部 | 一本久久综合 | 激情丁香婷婷 | 一区二区成人免费视频 | 97精品人妻一区二区 | 亚洲成色在线 | 一本毛片 | 国产av人人夜夜澡人人爽 | 钰慧的mv视频在线观看 | 校园春色欧美 | 亚洲国产成人精品一区二区三区 | 一区二区三区网 | 4438成人网| 男人天堂亚洲天堂 | 国产成人一区在线观看 | www.国产麻豆 | 伊人免费在线观看高清版 | 久久精品国产亚洲AV无码男同 | 精品国产一区二区三区性色av | 欧洲精品码一区二区三区免费看 | 午夜免费网址 | 天堂激情网| 国产精品一区视频 | 日剧再来一次第十集 | 日本免费在线视频 | 香蕉视频国产在线观看 | 欧美色频| 草草影院1 | 国产成人自拍在线 | 精品视频一区二区三区 | 丝袜性爱视频 | 日韩免费观看视频 | 精品国产一区二区三区四区精华 | 一本色道久久88亚洲精品综合 | 成人毛片一区二区三区 | 青草草在线观看 | 欧美三级久久 | 超碰天堂 | 精品一区二区三区四区五区 | 国产va视频| 亚洲色图国产精品 | 欧美人xxxx| 特级毛片www | 韩日一级片 | 神马一区二区三区 | 国内久久久 | 四虎网站在线播放 | 亚洲欧美电影 | hd性videos意大利精品 | 日本国产精品一区 | 日韩在线国产精品 | 激情综合网站 | av网在线播放 | 精品美女久久久 | 欧美性天堂 | 91精品日韩 | 欧美黑人一级爽快片淫片高清 | 黄色片视频网站 | 伊人久久久 | 欧美高清精品 | 全黄性性激高免费视频 | 久久久嫩草 | 黄色一级片免费观看 | 精品国精品国产自在久不卡 | 色97| 大奶子av| 免费中文字幕日韩 | 在线观看日韩av电影 | 亚洲精品1区2区 | 国产黄色一级网站 | jlzzzjlzzz国产免费观看 | 亚洲尻逼| 日韩在线www | 一区二区免费在线 | h片在线| 不卡网av| 国产拍拍视频 | 午夜影院免费体验区 | 国产乱码精品一区二区三区五月婷 | 成人一区二区在线观看 | 亚洲精品国产乱伦 | 欧美mv日韩mv国产网站app | 亚洲精品福利在线 | av爱爱爱| 影音先锋久久久久av综合网成人 | 成人黄色网址在线观看 | 日本综合视频 | 18成人免费观看网站 | av高清免费 | 久久一区欧美 | 欧美aa在线观看 | 亚洲另类视频 | 毛片a片免费观看 | 日韩麻豆视频 | 国产又粗又长又硬免费视频 |