0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

垃圾收集器的JVM參數(shù)配置

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 16:35 ? 次閱讀

本篇文章我們就來(lái)給大家介紹垃圾收集器的 JVM 參數(shù)配置。

JVM參數(shù)有很多,其實(shí)我們直接使用默認(rèn)的JVM參數(shù),不去修改都可以滿足大多數(shù)情況。但是如果你想在有限的硬件資源下,部署的系統(tǒng)達(dá)到最大的運(yùn)行效率,那么進(jìn)行相關(guān)的JVM參數(shù)設(shè)置是必不可少的。下面我們就來(lái)對(duì)這些JVM參數(shù)進(jìn)行詳細(xì)的介紹。JVM參數(shù)主要分為以下三種(可以根據(jù)書寫形式來(lái)區(qū)分):

1、標(biāo)準(zhǔn)參數(shù)

標(biāo)準(zhǔn)參數(shù),顧名思義,標(biāo)準(zhǔn)參數(shù)中包括功能以及輸出的結(jié)果都是很穩(wěn)定的,基本上不會(huì)隨著JVM版本的變化而變化。

我們可以通過(guò) -help 命令來(lái)檢索出所有標(biāo)準(zhǔn)參數(shù)。

圖片

關(guān)于這些命令的詳細(xì)解釋,可以參考官網(wǎng):https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html

-help 也是一個(gè)標(biāo)準(zhǔn)參數(shù),再比如使用比較多的 -version也是。

①、-version

顯示Java的版本信息。圖片

2、X 參數(shù)

對(duì)應(yīng)前面講的標(biāo)準(zhǔn)化參數(shù),這是非標(biāo)準(zhǔn)化參數(shù)。表示在將來(lái)的JVM版本中可能會(huì)發(fā)生改變,但是這類以 -X開(kāi)始的參數(shù)變化的比較小。

我們可以通過(guò) Java -X 命令來(lái)檢索所有-X 參數(shù)。

圖片

關(guān)于這些參數(shù)的介紹,其實(shí)上圖的中文解釋很清楚了,這里我們不作過(guò)多的介紹。

3、XX參數(shù)

這是我們?nèi)粘i_(kāi)發(fā)中接觸到最多的參數(shù)類型。這也是非標(biāo)準(zhǔn)化參數(shù),相對(duì)來(lái)說(shuō)不穩(wěn)定,隨著JVM版本的變化可能會(huì)發(fā)生變化,主要用于JVM調(diào)優(yōu)和debug。

注意:這種參數(shù)是我們后續(xù)介紹JVM調(diào)優(yōu)講解最多的參數(shù)。

該參數(shù)的書寫形式又分為兩大類:

①、Boolean類型 格式:-XX:[+-]表示啟用或者禁用name屬性。

例子:-XX:+UseG1GC(表示啟用G1垃圾收集器)

②、Key-Value類型 格式:-XX:=表示name的屬性值為value。

例子:-XX:MaxGCPauseMillis=500(表示設(shè)置GC的最大停頓時(shí)間是500ms)

4、參數(shù)詳解

1、打印已經(jīng)被用戶或者當(dāng)前虛擬機(jī)設(shè)置過(guò)的參數(shù)

-XX:+PrintCommandLineFlags

比如:

圖片

2、最大堆和最小堆內(nèi)存設(shè)置

-Xms512M:設(shè)置堆內(nèi)存初始值為512M

-Xmx1024M:設(shè)置堆內(nèi)存最大值為1024M

這里的ms是memory start的簡(jiǎn)稱,mx是memory max的簡(jiǎn)稱,分別代表最小堆容量和最大堆容量。但是別看這里是-X參數(shù),其實(shí)這是-XX參數(shù),等價(jià)于:

-XX:InitialHeapSize

-XX:MaxHeapSize

在通常情況下,服務(wù)器項(xiàng)目在運(yùn)行過(guò)程中,堆空間會(huì)不斷的收縮與擴(kuò)張,勢(shì)必會(huì)造成不必要的系統(tǒng)壓力。所以在生產(chǎn)環(huán)境中,JVM的Xms和Xmx要設(shè)置成一樣的,能夠避免GC在調(diào)整堆大小帶來(lái)的不必要的壓力。

3、Dump異??煺找约耙晕募问綄?dǎo)出

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

堆內(nèi)存出現(xiàn)OOM的概率是所有內(nèi)存耗盡異常中最高的,出錯(cuò)時(shí)的堆內(nèi)信息對(duì)解決問(wèn)題非常有幫助,所以給JVM設(shè)置這個(gè)參數(shù)(-XX:+HeapDumpOnOutOfMemoryError),讓JVM遇到OOM異常時(shí)能輸出堆內(nèi)信息,并通過(guò)(-XX:+HeapDumpPath)參數(shù)設(shè)置堆內(nèi)存溢出快照輸出的文件地址,這對(duì)于特別是對(duì)相隔數(shù)月才出現(xiàn)的OOM異常尤為重要。

這兩個(gè)參數(shù)通常配套使用:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./

4、發(fā)送OOM后,執(zhí)行一個(gè)腳本

-XX:OnOutOfMemoryError

比如這樣設(shè)置:

-XX:OnOutOfMemoryError="C:Program FilesJavajdk1.8.0_152binjconsole.exe"

表示發(fā)生OOM后,運(yùn)行jconsole.exe程序。這里可以不用加“”,因?yàn)閖console.exe路徑Program Files含有空格。

利用這個(gè)參數(shù),我們可以在系統(tǒng)OOM后,自定義一個(gè)腳本,可以用來(lái)發(fā)送郵件告警信息,可以用來(lái)重啟系統(tǒng)等等。

5、打印gc信息

①、打印GC簡(jiǎn)單信息

-verbose:gc

-XX:+PrintGC

一個(gè)是標(biāo)準(zhǔn)參數(shù),一個(gè)是-XX參數(shù),都是打印詳細(xì)的gc信息。通常會(huì)打印如下信息:

圖片

比如第一行,表示GC回收之前有12195K的內(nèi)存,回收之后剩余1088K,總共內(nèi)存為125951K

②、打印詳細(xì)GC信息

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

圖片

6、指定GC日志以文件輸出

-Xloggc:./gc.log

這個(gè)在參數(shù)用于將gc日志以文件的形式輸出,更方便我們?nèi)ゲ榭慈罩荆ㄎ粏?wèn)題。

7、設(shè)置永久代大小

-XX:MaxPermSize=1280m

在JDK1.7以及以前的版本中,只有Hotspot 才有Perm區(qū),稱為永久代,它在啟動(dòng)時(shí)固定大小,很難進(jìn)行調(diào)優(yōu)。

在某些情況下,如果動(dòng)態(tài)加載類過(guò)多,容易產(chǎn)生Perm區(qū)的 OOM。比如某個(gè)實(shí)際 Web 工程中,因?yàn)楣δ茳c(diǎn)較多,在運(yùn)行過(guò)程中,要不斷動(dòng)態(tài)加載很多類,就會(huì)出現(xiàn)類似錯(cuò)誤:

"Exception in thread 'dubbo client x.x.connect' java.lang.OutOfMemoryError:PermGenspace"

為了解決這個(gè)問(wèn)題,就需要在項(xiàng)目啟動(dòng)時(shí),設(shè)定運(yùn)行參數(shù)-XX:MaxPermSize。

注意:在JDK1.8以后面的版本,使用元空間來(lái)代替永久代。在 JDK1.8以及后面的版本中,如果設(shè)定參數(shù)-XX:MaxPermSize,啟動(dòng)JVM不會(huì)報(bào)錯(cuò),但是會(huì)提示:

Java Hotspot 64Bit Server VM warning:ignoring option MaxPermSize=1280m:support was removed in 8.0

8、垃圾收集器常用參數(shù)

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3025

    瀏覽量

    74060
  • 參數(shù)
    +關(guān)注

    關(guān)注

    11

    文章

    1835

    瀏覽量

    32227
  • JVM
    JVM
    +關(guān)注

    關(guān)注

    0

    文章

    158

    瀏覽量

    12228
  • 收集器
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    3140
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    jvm參數(shù)配置問(wèn)題怎么解決

    jvm參數(shù)配置問(wèn)題
    發(fā)表于 05-05 17:29

    詳細(xì)介紹了Java泛型、注解、并發(fā)編程

    VS 分區(qū)收集算法、GC 垃圾收集器、JAVA IO/NIO 、JVM 類加載機(jī)制的各大知識(shí)點(diǎn)。詳細(xì)知識(shí)
    發(fā)表于 08-20 06:09

    Jvm垃圾回收機(jī)制及性能調(diào)優(yōu)實(shí)戰(zhàn)

    JVM中自動(dòng)檢測(cè)并移除不再使用的數(shù)據(jù)對(duì)象的這種機(jī)制稱為:垃圾回收,簡(jiǎn)稱GC。JVM通過(guò)使用垃圾收集器及使用相應(yīng)的
    發(fā)表于 04-03 14:31 ?2次下載

    JVM入門之垃圾回收算法

    根據(jù)如何判定對(duì)象是垃圾,垃圾回收算法分為兩類:1、 「引用計(jì)數(shù)式垃圾收集」 (判定垃圾是通過(guò)引用計(jì)數(shù)
    的頭像 發(fā)表于 02-10 11:40 ?819次閱讀
    <b class='flag-5'>JVM</b>入門之<b class='flag-5'>垃圾</b>回收算法

    JVM垃圾機(jī)制是如何工作的呢?

    單線程收集器,“單線程” 的意義并不僅僅說(shuō)明它只會(huì)使用一個(gè) CPU 或一條收集線程去完成垃圾收集工作,更重要的是在它進(jìn)行垃圾
    的頭像 發(fā)表于 02-28 16:08 ?611次閱讀

    漫途智能網(wǎng)關(guān)助力必藍(lán)水面垃圾收集器成為智慧數(shù)字城市的環(huán)境守護(hù)者!

    無(wú)錫高新區(qū)報(bào)道了一種“24小時(shí)自動(dòng)吃垃圾”的神奇產(chǎn)品,該設(shè)備是一種智能化的水面垃圾收集器。 文章截圖 這款水面垃圾自動(dòng)收集器采用了最新的跌水
    的頭像 發(fā)表于 05-09 16:25 ?627次閱讀
    漫途智能網(wǎng)關(guān)助力必藍(lán)水面<b class='flag-5'>垃圾</b><b class='flag-5'>收集器</b>成為智慧數(shù)字城市的環(huán)境守護(hù)者!

    Farmaid數(shù)據(jù)收集器開(kāi)源分享

    電子發(fā)燒友網(wǎng)站提供《Farmaid數(shù)據(jù)收集器開(kāi)源分享.zip》資料免費(fèi)下載
    發(fā)表于 06-27 10:00 ?0次下載
    Farmaid數(shù)據(jù)<b class='flag-5'>收集器</b>開(kāi)源分享

    如何選擇垃圾收集器

    1、垃圾收集器種類 事實(shí)上Java虛擬機(jī)規(guī)范對(duì)垃圾收集器應(yīng)該如何實(shí)現(xiàn),并沒(méi)有任何的規(guī)定,所以不同的廠商、不同版本的虛擬機(jī)所提供的垃圾
    的頭像 發(fā)表于 10-09 16:48 ?699次閱讀
    如何選擇<b class='flag-5'>垃圾</b><b class='flag-5'>收集器</b>

    jvm調(diào)優(yōu)參數(shù)

    JVM(Java虛擬機(jī))是Java程序的運(yùn)行環(huán)境,它負(fù)責(zé)解釋Java字節(jié)碼并執(zhí)行相應(yīng)的指令。為了提高應(yīng)用程序的性能和穩(wěn)定性,我們可以調(diào)優(yōu)JVM參數(shù)JVM調(diào)優(yōu)主要涉及到堆內(nèi)存、
    的頭像 發(fā)表于 12-05 11:29 ?634次閱讀

    jvm參數(shù)的設(shè)置和jvm調(diào)優(yōu)

    JVM(Java虛擬機(jī))參數(shù)的設(shè)置和調(diào)優(yōu)對(duì)于提高Java應(yīng)用程序的性能和穩(wěn)定性非常重要。在本文中,我們將詳細(xì)介紹JVM參數(shù)的設(shè)置和調(diào)優(yōu)方法。 一、J
    的頭像 發(fā)表于 12-05 11:36 ?1570次閱讀

    jvm配置metaspace最大值的參數(shù)

    不同的參數(shù)來(lái)進(jìn)行配置。本文將詳細(xì)介紹JVM配置Metaspace最大值的參數(shù),包括-Xmx、-XX:MaxMetaspaceSize、-XX
    的頭像 發(fā)表于 12-05 14:21 ?2145次閱讀

    jvm配置的mx

    用于設(shè)置JVM的最大堆內(nèi)存大小,即堆的上限。當(dāng)堆內(nèi)存不足時(shí),JVM會(huì)觸發(fā)垃圾回收機(jī)制以釋放內(nèi)存。如果垃圾回收無(wú)法釋放足夠的內(nèi)存,JVM可能會(huì)
    的頭像 發(fā)表于 12-05 14:24 ?713次閱讀

    weblogic jvm參數(shù)配置

    在WebLogic中,JVM參數(shù)配置是非常重要的,它可以對(duì)應(yīng)用程序的性能和穩(wěn)定性產(chǎn)生直接影響。JVM參數(shù)通過(guò)調(diào)整Java虛擬機(jī)的運(yùn)行時(shí)行為,
    的頭像 發(fā)表于 12-05 14:31 ?1431次閱讀

    weblogic控制臺(tái)配置jvm參數(shù)

    WebLogic Server是一個(gè)用于構(gòu)建、部署和管理大規(guī)模分布式應(yīng)用程序的Java EE應(yīng)用服務(wù)。在WebLogic控制臺(tái)中配置JVM參數(shù)非常重要,它可以影響應(yīng)用程序性能和服務(wù)
    的頭像 發(fā)表于 12-05 14:48 ?2817次閱讀

    深入理解Java 8內(nèi)存管理機(jī)制及故障排查實(shí)戰(zhàn)指南

    Java的自動(dòng)內(nèi)存管理機(jī)制是由 JVM 中的垃圾收集器來(lái)實(shí)現(xiàn)的,垃圾收集器會(huì)定期掃描堆內(nèi)存中的對(duì)象,檢測(cè)并清除不再使用的對(duì)象,以釋放內(nèi)存資源
    的頭像 發(fā)表于 04-04 08:10 ?1005次閱讀
    深入理解Java 8內(nèi)存管理機(jī)制及故障排查實(shí)戰(zhàn)指南