Java JVM(Java虛擬機(jī))啟動(dòng)參數(shù)的設(shè)置方式
Java JVM(Java虛擬機(jī))啟動(dòng)參數(shù)的設(shè)置對于優(yōu)化Java應(yīng)用程序的性能至關(guān)重要。
這些參數(shù)可以分為標(biāo)準(zhǔn)參數(shù)、非標(biāo)準(zhǔn)參數(shù)(也稱為-X參數(shù))和非Stable參數(shù)(以-XX為前綴)。
以下是一些常用的JVM啟動(dòng)參數(shù)設(shè)置:
一、標(biāo)準(zhǔn)參數(shù)
-verbose:gc
- 輸出虛擬機(jī)中垃圾收集(GC)的詳細(xì)情況。
-verbose:class
- 輸出JVM載入類的相關(guān)信息,當(dāng)JVM報(bào)告找不到類或類沖突時(shí),可用于診斷。
二、非標(biāo)準(zhǔn)參數(shù)(-X)
-Xms<size>
- 設(shè)置JVM啟動(dòng)時(shí)的初始堆內(nèi)存大小。
- 例如,
-Xms512m表示設(shè)置JVM堆內(nèi)存初始值為512MB。
-Xmx<size>
- 設(shè)置JVM可使用的最大堆內(nèi)存大小。
- 例如,
-Xmx1024m表示設(shè)置JVM堆內(nèi)存最大可用內(nèi)存為1024MB。為了避免JVM內(nèi)存自動(dòng)擴(kuò)展,建議將-Xmx和-Xms設(shè)置為相同的值。
-Xmn<size>
- 設(shè)置年輕代(Young Generation)的大小。
- 例如,
-Xmn200m表示設(shè)置年輕代大小為200MB。年輕代用于存放新生成的對象,其大小對系統(tǒng)性能有較大影響。
-Xss<size>
- 設(shè)置每個(gè)線程的堆棧大小。
- 例如,
-Xss128k表示設(shè)置每個(gè)線程的堆棧大小為128KB。根據(jù)應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整。
三、非Stable參數(shù)(-XX)
-XX:+UseSerialGC
- 啟用串行垃圾收集器。
- 這是JVM的默認(rèn)GC方式,一般適用于小型應(yīng)用和單處理器。
-XX:+UseParallelGC
- 啟用并行垃圾收集器。
- 并行GC在GC運(yùn)行時(shí),對應(yīng)用程序運(yùn)行沒有影響,可以最大限度不影響app的運(yùn)行。
-XX:+UseConcMarkSweepGC
- 啟用并發(fā)標(biāo)記交換算法進(jìn)行GC。
- 適用于多處理器系統(tǒng),可以提高GC的效率,但算法復(fù)雜,系統(tǒng)消耗較大。
-XX:NewRatio=<int>
- 設(shè)置年輕代(Young Generation)與老年代(Old Generation)的比例。
- 例如,
-XX:NewRatio=3表示年輕代與老年代的比例為1:3。
-XX:SurvivorRatio=<int>
- 設(shè)置Eden區(qū)與Survivor區(qū)的大小比例。
- 例如,
-XX:SurvivorRatio=8表示Eden區(qū)與Survivor區(qū)的比例為8:1。
-XX:MaxPermSize=<size>
- 設(shè)置永久代(PermGen space,在Java 8中已被元空間Metaspace替代)的最大值。
- 例如,
-XX:MaxPermSize=256m。但請注意,在Java 8及更高版本中,應(yīng)使用-XX:MaxMetaspaceSize來設(shè)置元空間的最大值。
-XX:+HeapDumpOnOutOfMemoryError
- 當(dāng)堆內(nèi)存空間溢出時(shí),輸出堆的內(nèi)存快照。
-XX:HeapDumpPath=<path>
- 指定堆內(nèi)存快照的輸出路徑。
-XX:+PrintGC
- 每次GC時(shí)打印相關(guān)信息。
-XX:+PrintGCDetails
- 每次GC時(shí)打印詳細(xì)信息,包括各個(gè)區(qū)的情況。
-Xloggc:<file-path>
- 指定GC日志的輸出路徑。
- 例如,
-Xloggc:/data/logs/gc.log。
-XX:NumberOfGCLogFiles=<int>
- 設(shè)置GC日志文件的滾動(dòng)個(gè)數(shù)。
-XX:GCLogFileSize=<size>
- 設(shè)置每個(gè)GC日志文件的大小。
四、其他常用參數(shù)
-D<name>=<value>
- 設(shè)置系統(tǒng)屬性。
- 例如,
-Dspring.profiles.active=prd用于設(shè)置Spring框架的活動(dòng)配置文件。
-server
- 設(shè)置JVM使用server模式。
- 該模式下,JVM的啟動(dòng)速度較慢,但運(yùn)行時(shí)性能和內(nèi)存管理效率更高,適用于生產(chǎn)環(huán)境。
-Xbootclasspath:<path>
- 指定JVM加載但不想通過校驗(yàn)的類路徑。
-Xdebug
- JVM調(diào)試參數(shù),用于調(diào)試。
- 例如,在Tomcat中設(shè)置遠(yuǎn)程調(diào)試時(shí),可以使用
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000。
請注意:
不同的JVM實(shí)現(xiàn)(如Oracle JDK、OpenJDK等)可能對某些參數(shù)的支持有所不同,且隨著JVM版本的更新,某些參數(shù)可能會(huì)被棄用或引入新的參數(shù)。因此,在設(shè)置JVM參數(shù)時(shí),建議查閱當(dāng)前JVM版本的官方文檔以獲取最準(zhǔn)確的信息。
五、總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot 加載 META-INF/spring.factories方式
這篇文章主要介紹了springboot 加載 META-INF/spring.factories方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Mybatis Plus LambdaQueryWrapper的具體用法
Mybatis Plus 在其基礎(chǔ)上擴(kuò)展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加簡便的查詢語法,同時(shí)也避免了SQL注入的風(fēng)險(xiǎn),感興趣的可以了解一下2023-11-11
spring中@RestController和@Controller的區(qū)別小結(jié)
@RestController和@Controller這兩個(gè)注解用于創(chuàng)建Web應(yīng)用程序的控制器類,那么這兩個(gè)注解有哪些區(qū)別,本文就來介紹一下,并用示例代碼說明,感興趣的可以了解一下2023-09-09
spring?cloud?eureka注冊原理-注冊失敗填坑筆記
這篇文章主要介紹了spring?cloud?eureka注冊原理-注冊失敗填坑筆記,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Java導(dǎo)出Execl疑難點(diǎn)處理的實(shí)現(xiàn)
這篇文章主要介紹了Java導(dǎo)出Execl疑難點(diǎn)處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案
今天小編就為大家分享一篇關(guān)于Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Springboot使用RabbitMq延遲隊(duì)列和死信隊(duì)列詳解
文章介紹了在項(xiàng)目中實(shí)現(xiàn)文件分片上傳功能時(shí)遇到的問題,以及使用Quartz定時(shí)器、Redis定時(shí)器和RabbitMQ延遲隊(duì)列和死信隊(duì)列三種方法來解決定時(shí)任務(wù)和刪除臨時(shí)桶的問題,文章詳細(xì)描述了RabbitMQ延遲隊(duì)列的配置和使用,包括延遲時(shí)間、死信交換機(jī)和監(jiān)聽器的設(shè)置2025-10-10
Java變量命名規(guī)則詳解及常見命名錯(cuò)誤(建議收藏)
這篇文章主要介紹了Java中變量命名的規(guī)則及最佳實(shí)踐,包括有效字符、大小寫敏感性、不能使用保留字、駝峰命名法、描述性命名、特定類型的命名習(xí)慣、避免潛在問題、常見命名錯(cuò)誤及如何避免等內(nèi)容,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02

