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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

这 17 个 JVM 参数,高级 Java 必须掌握!

發(fā)布時(shí)間:2025/3/21 java 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这 17 个 JVM 参数,高级 Java 必须掌握! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:SimpleSmile

cnblogs.com/Simple-Object/p/10272326.html

前言

大家都知道,jvm在啟動(dòng)的時(shí)候,會(huì)執(zhí)行默認(rèn)的一些參數(shù)。一般情況下,這些設(shè)置的默認(rèn)參數(shù)應(yīng)對(duì)一些平常的項(xiàng)目也夠用了。但是如果項(xiàng)目特別大了,需要增加一下堆內(nèi)存的大小、或者是系統(tǒng)老是莫明的掛掉,想查看下gc日志來(lái)排查一下錯(cuò)誤的原因,都需要咱們手動(dòng)設(shè)置這些參數(shù)。

各個(gè)參數(shù)介紹

1.verbose:gc

表示,啟動(dòng)jvm的時(shí)候,輸出jvm里面的gc信息。格式如下:

[Full?GC?178K->99K(1984K),?0.0253877?secs]

解讀 :Full GC 就表示執(zhí)行了一次Full GC的操作,178K 和99K 就表示執(zhí)行GC前內(nèi)存容量和執(zhí)行GC后的內(nèi)存容量。1984K就表示內(nèi)存總?cè)萘俊:竺婺莻€(gè)是執(zhí)行本次GC所消耗的時(shí)間,單位是秒。

2.-XX:+printGC

這個(gè)打印的GC信息跟上個(gè)一樣,就不做介紹了。

3.-XX:+PrintGCDetails

打印GC的詳細(xì)信息。格式如下:

–Heap –?def?new?generation???total?13824K,?used?11223K?[0x27e80000,?0x28d80000,?0x28d80000) –??eden?space?12288K,??91%?used?[0x27e80000,?0x28975f20,?0x28a80000) –??from?space?1536K,???0%?used?[0x28a80000,?0x28a80000,?0x28c00000) –??to???space?1536K,???0%?used?[0x28c00000,?0x28c00000,?0x28d80000) –?tenured?generation???total?5120K,?used?0K?[0x28d80000,?0x29280000,?0x34680000) –???the?space?5120K,???0%?used?[0x28d80000,?0x28d80000,?0x28d80200,?0x29280000) –?compacting?perm?gen??total?12288K,?used?142K?[0x34680000,?0x35280000,?0x38680000) –???the?space?12288K,???1%?used?[0x34680000,?0x346a3a90,?0x346a3c00,?0x35280000) –????ro?space?10240K,??44%?used?[0x38680000,?0x38af73f0,?0x38af7400,?0x39080000) –????rw?space?12288K,??52%?used?[0x39080000,?0x396cdd28,?0x396cde00,?0x39c80000)

解讀:new generation 就是堆內(nèi)存里面的新生代。total的意思就是一共的,所以后面跟的就是新生代一共的內(nèi)存大小。used也就是使用了多少內(nèi)存大小。0x開(kāi)頭的那三個(gè)分別代表的是 底邊界,當(dāng)前邊界,高邊界。也就是新生代這片內(nèi)存的起始點(diǎn),當(dāng)前使用到的地方和最大的內(nèi)存地點(diǎn)。

eden space 這個(gè)通常被翻譯成伊甸園區(qū),是在新生代里面的,一些創(chuàng)建的對(duì)象都會(huì)先被放進(jìn)這里。后面那個(gè)12288K就表示伊甸園區(qū)一共的內(nèi)存大小,91% used,很明顯,表示已經(jīng)使用了百分之多少。后面的那個(gè)0x跟上一行的解釋一樣。

from space 和to space 是幸存者的兩個(gè)區(qū)。也是屬于新生代的。他兩個(gè)區(qū)的大小必須是一樣的。因?yàn)樾律腉C采用的是復(fù)制算法,每次只會(huì)用到一個(gè)幸存區(qū),當(dāng)一個(gè)幸存區(qū)滿了的時(shí)候,把還是活的對(duì)象復(fù)制到另個(gè)幸存區(qū),上個(gè)直接清空。這樣做就不會(huì)產(chǎn)生內(nèi)存碎片了。

tenured generation 就表示老年代。

compacting perm 表示永久代。由于這兩個(gè)的格式跟前面我介紹的那個(gè)幾乎一樣,我就不必介紹了。

4.-XX:+PrintGCTimeStamps

打印GC發(fā)生的時(shí)間戳。格式如下:

289.556:?[GC?[PSYoungGen:?314113K->15937K(300928K)]?405513K->107901K(407680K),?0.0178568?secs]?[Times:?user=0.06?sys=0.00,?real=0.01?secs]?293.271:?[GC?[PSYoungGen:?300865K->6577K(310720K)]?392829K->108873K(417472K),?0.0176464?secs]?[Times:?user=0.06?sys=0.00,?real=0.01?secs]

解讀:289.556表示從jvm啟動(dòng)到發(fā)生垃圾回收所經(jīng)歷的的時(shí)間。GC表示這是新生代GC(Minor GC)。PSYoungGen表示新生代使用的是多線程垃圾回收器Parallel Scavenge。314113K->15937K(300928K)]這個(gè)跟上面那個(gè)GC格式一樣。

只不過(guò),這個(gè)是表示的是新生代,幸存者區(qū)。后面那個(gè)是整個(gè)堆的大小,GC前和GC后的情況。Times這個(gè)顯而易見(jiàn),代表GC的所消耗的時(shí)間,用戶垃圾回收的時(shí)間和系統(tǒng)消耗的時(shí)間和最終真實(shí)的消耗時(shí)間。

5.-X:loggc:log/gc.log

這個(gè)就表示,指定輸出gc.log的文件位置。(我這里寫(xiě)的log/gc.log就表示在當(dāng)前l(fā)og的目錄里,把GC日志寫(xiě)到叫g(shù)c.log的文件里。)

6.-XX:+PrintHeapAtGC

表示每次GC后,都打印堆的信息。(這個(gè)打印的基本格式跟上面第二條的基本類似,我也就不比多說(shuō)了。)

7.-XX:+TraceClassLoading

監(jiān)控類的加載。格式如下:

?[Loaded?java.lang.Object?from?shared?objects?file] ?[Loaded?java.io.Serializable?from?shared?objects?file] ?[Loaded?java.lang.Comparable?from?shared?objects?file] ?[Loaded?java.lang.CharSequence?from?shared?objects?file] ?[Loaded?java.lang.String?from?shared?objects?file] ?[Loaded?java.lang.reflect.GenericDeclaration?from?shared?objects?file] ?[Loaded?java.lang.reflect.Type?from?shared?objects?file]

使用這個(gè)參數(shù)就能很清楚的看到那些類被加載的情況了。

8.-XX:+PrintClassHistogram

跟蹤參數(shù)。這個(gè)按下Ctrl+Break后,就會(huì)打印一下信息:

num?????#instances?????????#bytes??class?name----------------------------------------------1:????????890617??????470266000??[B2:????????890643???????21375432??java.util.HashMap$Node3:????????890608???????14249728??java.lang.Long4:????????????13????????8389712??[Ljava.util.HashMap$Node;5:??????????2062?????????371680??[C6:???????????463??????????41904??java.lang.Class

分別顯示:序號(hào)、實(shí)例數(shù)量、總大小、類型。

這里面那個(gè)類型,B和C的其實(shí)就是byte和char類型。

9.-Xmx -Xms

這個(gè)就表示設(shè)置堆內(nèi)存的最大值和最小值。這個(gè)設(shè)置了最大值和最小值后,jvm啟動(dòng)后,并不會(huì)直接讓堆內(nèi)存就擴(kuò)大到指定的最大數(shù)值。而是會(huì)先開(kāi)辟指定的最小堆內(nèi)存,如果經(jīng)過(guò)數(shù)次GC后,還不能,滿足程序的運(yùn)行,才會(huì)逐漸的擴(kuò)容堆的大小,但也不是直接擴(kuò)大到最大內(nèi)存。

10.-Xmn

設(shè)置新生代的內(nèi)存大小。

11.-XX:NewRatio

新生代和老年代的比例。比如:1:4,就是新生代占五分之一。

12.-XX:SurvivorRatio

設(shè)置兩個(gè)Survivor區(qū)和eden區(qū)的比例。比如:2:8 ,就是一個(gè)Survivor區(qū)占十分之一。

13.-XX:+HeapDumpOnOutMemoryError

發(fā)生OOM時(shí),導(dǎo)出堆的信息到文件。

14.-XX:+HeapDumpPath

表示,導(dǎo)出堆信息的文件路徑。

15.-XX:OnOutOfMemoryError

當(dāng)系統(tǒng)產(chǎn)生OOM時(shí),執(zhí)行一個(gè)指定的腳本,這個(gè)腳本可以是任意功能的。比如生成當(dāng)前線程的dump文件,或者是發(fā)送郵件和重啟系統(tǒng)。

16.-XX:PermSize -XX:MaxPermSize

設(shè)置永久區(qū)的內(nèi)存大小和最大值。永久區(qū)內(nèi)存用光也會(huì)導(dǎo)致OOM的發(fā)生。

17.-Xss

設(shè)置棧的大小。棧都是每個(gè)線程獨(dú)有一個(gè),所有一般都是幾百k的大小。

總結(jié)

以上就是我整理的一些jvm設(shè)置的參數(shù),當(dāng)然不止這些。我這只是介紹了些常用的參數(shù)。希望能夠幫到大家,由于能力有限,如有錯(cuò)誤的地方敬請(qǐng)諒解。

總結(jié)

以上是生活随笔為你收集整理的这 17 个 JVM 参数,高级 Java 必须掌握!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。