java JDK17 jvm參數(shù)配置過程解讀
java JDK17 jvm參數(shù)配置
配置示例
--add-opens=java.base/java.lang=ALL-UNNAMED \ -Xms1500m -Xmx1500m \-XX:ReservedCodeCacheSize=256m \-XX:InitialCodeCacheSize=256m \ -XX:+UnlockExperimentalVMOptions \-XX:+UseZGC \-XX:ConcGCThreads=1 -XX:ParallelGCThreads=2 \-XX:ZCollectionInterval=30 -XX:ZAllocationSpikeTolerance=5 \-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive \-Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/opt/gc-%t.log:time,tid,tags:filecount=5,filesize=50m \-XX:+HeapDumpOnOutOfMemoryError \-XX:HeapDumpPath=/opt/errorDump.hprof
參數(shù)解讀
這些JVM參數(shù)用于配置Java虛擬機(jī)(JVM)的行為,以優(yōu)化性能、監(jiān)控垃圾收集活動(dòng)、管理內(nèi)存分配,并啟用一些實(shí)驗(yàn)性或診斷功能。
下面是對每個(gè)參數(shù)的詳細(xì)解釋:
--add-opens=java.base/java.lang=ALL-UNNAMED
- 這個(gè)參數(shù)用于打開模塊系統(tǒng)中
java.base模塊內(nèi)java.lang包的訪問權(quán)限,允許未命名模塊(通常是那些沒有聲明屬于任何模塊的類路徑上的類)訪問這個(gè)包內(nèi)的元素。 - 這對于某些需要反射訪問Java核心庫內(nèi)部細(xì)節(jié)的框架或工具是必要的。
-Xms1500m -Xmx1500m
- 設(shè)置JVM的初始堆內(nèi)存大?。?code>-Xms)和最大堆內(nèi)存大?。?code>-Xmx)為1500MB。
- 這有助于減少應(yīng)用程序啟動(dòng)時(shí)的內(nèi)存分配調(diào)整,并限制其占用的最大內(nèi)存空間。
-XX:ReservedCodeCacheSize=256m -XX:InitialCodeCacheSize=256m
- 分別設(shè)置了代碼緩存的初始大小和預(yù)留的最大大小為256MB。
- 代碼緩存用于存儲(chǔ)JIT(Just-In-Time)編譯后的本地代碼,這兩個(gè)設(shè)置確保了足夠的空間用于即時(shí)編譯,以提高運(yùn)行效率。
-XX:+UnlockExperimentalVMOptions
- 啟用實(shí)驗(yàn)性JVM選項(xiàng)
- 允許使用一些尚未穩(wěn)定或默認(rèn)不公開的特性
-XX:+UseZGC
- 指定使用Z Garbage Collector(ZGC)
- 這是一個(gè)可伸縮、低延遲的垃圾收集器,特別適合大規(guī)模的多核系統(tǒng),旨在實(shí)現(xiàn)暫停時(shí)間不超過10毫秒的目標(biāo)。
-XX:ConcGCThreads=1 -XX:ParallelGCThreads=2
- 配置ZGC或其他并行GC的線程數(shù)。
ConcGCThreads=1指定了并發(fā)標(biāo)記階段使用的線程數(shù),而ParallelGCThreads=2則指定了在并行回收階段使用的線程數(shù)。
-XX:ZCollectionInterval=30 -XX:ZAllocationSpikeTolerance=5
- ZGC特有的參數(shù)。
ZCollectionInterval設(shè)置觸發(fā)垃圾收集周期的時(shí)間間隔(單位是秒),這里是每30秒檢查一次是否需要進(jìn)行垃圾回收。ZAllocationSpikeTolerance控制內(nèi)存分配速率突增的容忍度,值越高,JVM越晚響應(yīng)突增的內(nèi)存需求,以避免不必要的垃圾回收。
-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive
- 前者解鎖診斷性的VM選項(xiàng),允許使用一些用于調(diào)試和診斷的特殊選項(xiàng)。
- 后者禁用ZGC的主動(dòng)回收模式,即不基于預(yù)測來提前執(zhí)行垃圾回收。
-Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/opt/gc-%t.log:time,tid,tags:filecount=5,filesize=50m
- 配置日志記錄,包括安全點(diǎn)活動(dòng)、類加載統(tǒng)計(jì)、年齡信息以及所有與GC相關(guān)的日志級別分別設(shè)置為trace和info。
- 日志將被寫入到
/opt/gc-%t.log,其中%t會(huì)被當(dāng)前時(shí)間戳替代,同時(shí)限制最多保留5個(gè)文件,每個(gè)文件最大50MB,并且包含時(shí)間、線程ID和標(biāo)簽信息。
-XX:+HeapDumpOnOutOfMemoryError
- 當(dāng)發(fā)生內(nèi)存溢出錯(cuò)誤(OutOfMemoryError)時(shí)
- 自動(dòng)創(chuàng)建堆轉(zhuǎn)儲(chǔ)文件,這對于后期分析問題原因非常有用
-XX:HeapDumpPath=/opt/errorDump.hprof
- 指定當(dāng)發(fā)生內(nèi)存溢出時(shí)
- 堆轉(zhuǎn)儲(chǔ)文件的保存路徑為
/opt/errorDump.hprof
整體而言:
這些配置旨在優(yōu)化一個(gè)應(yīng)用的內(nèi)存管理、垃圾收集策略,以及提升在遇到內(nèi)存問題時(shí)的診斷能力,特別是針對需要高性能、低延遲處理的應(yīng)用場景。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類
這篇文章主要介紹了Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Spring實(shí)戰(zhàn)之ResourceLoaderAware加載資源用法示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之ResourceLoaderAware加載資源用法,結(jié)合實(shí)例形式分析了spring使用ResourceLoaderAware加載資源相關(guān)配置與操作技巧,需要的朋友可以參考下2020-01-01
Java序列化問題:“Serialized class has not impl
在Java開發(fā)中,序列化(Serialization)是一個(gè)常見的操作,尤其是在分布式系統(tǒng)、網(wǎng)絡(luò)通信或數(shù)據(jù)持久化場景中,然而,序列化過程中可能會(huì)遇到各種問題,其中最常見的一個(gè)錯(cuò)誤是Serialized class has not implement Serializable interface,本文給大家介紹了相關(guān)的解決方法2025-02-02
Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密功能)
這篇文章主要給大家介紹了關(guān)于Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2018-05-05
SpringBoot項(xiàng)目nohup啟動(dòng)運(yùn)行日志過大的解決方案
這篇文章主要介紹了SpringBoot項(xiàng)目nohup啟動(dòng)運(yùn)行日志過大的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
SpringBoot自定義線程池,執(zhí)行定時(shí)任務(wù)方式
這篇文章主要介紹了SpringBoot自定義線程池,執(zhí)行定時(shí)任務(wù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04

