JVM——JVM參數指南

文章目錄

    • 1.概述
    • 2.堆內存相關
      • 2.1.顯式指定堆內存`–Xms`和`-Xmx`
      • 2.2.顯式新生代內存(Young Ceneration)
      • 2.3.顯示指定永久代/元空間的大小
    • 3.垃圾收集相關
      • 3.1.垃圾回收器
      • 3.2.GC記錄

1.概述

在本篇文章中,你將掌握最常用的 JVM 參數配置。如果對于下面提到了一些概念比如堆、

2.堆內存相關

Java 虛擬機所管理的內存中最大的一塊,Java 堆是所有線程共享的一塊內存區域,在虛擬機啟動時創建。此內存區域的唯一目的就是存放對象實例,幾乎所有的對象實例以及數組都在這里分配內存。

2.1.顯式指定堆內存–Xms-Xmx

與性能有關的最常見實踐之一是根據應用程序要求初始化堆內存。如果我們需要指定最小和最大堆大小(推薦顯示指定大小),以下參數可以幫助你實現:

-Xms<heap size>[unit] 
-Xmx<heap size>[unit]
  • heap size 表示要初始化內存的具體大小。
  • unit 表示要初始化內存的單位。單位為***“ g”*** (GB) 、“ m”(MB)、“ k”(KB)。

舉個栗子🌰,如果我們要為JVM分配最小2 GB和最大5 GB的堆內存大小,我們的參數應該這樣來寫:

-Xms2G -Xmx5G

2.2.顯式新生代內存(Young Ceneration)

根據Oracle官方文檔,在堆總可用內存配置完成之后,第二大影響因素是為 Young Generation 在堆內存所占的比例。默認情況下,YG 的最小大小為 1310 MB,最大大小為無限制

一共有兩種指定 新生代內存(Young Ceneration)大小的方法:

1.通過-XX:NewSize-XX:MaxNewSize指定

-XX:NewSize=<young size>[unit] 
-XX:MaxNewSize=<young size>[unit]

舉個栗子🌰,如果我們要為 新生代分配 最小256m 的內存,最大 1024m的內存我們的參數應該這樣來寫:

-XX:NewSize=256m
-XX:MaxNewSize=1024m

2.通過-Xmn<young size>[unit] 指定

舉個栗子🌰,如果我們要為 新生代分配256m的內存(NewSize與MaxNewSize設為一致),我們的參數應該這樣來寫:

-Xmn256m 

GC 調優策略中很重要的一條經驗總結是這樣說的:

將新對象預留在新生代,由于 Full GC 的成本遠高于 Minor GC,因此盡可能將對象分配在新生代是明智的做法,實際項目中根據 GC 日志分析新生代空間大小分配是否合理,適當通過“-Xmn”命令調節新生代大小,最大限度降低新對象直接進入老年代的情況。

另外,你還可以通過**-XX:NewRatio=<int>**來設置新生代和老年代內存的比值。

比如下面的參數就是設置新生代(包括Eden和兩個Survivor區)與老年代的比值為1。也就是說:新生代與老年代所占比值為1:1,新生代占整個堆棧的 1/2。

-XX:NewRatio=1

2.3.顯示指定永久代/元空間的大小

從Java 8開始,如果我們沒有指定 Metaspace 的大小,隨著更多類的創建,虛擬機會耗盡所有可用的系統內存(永久代并不會出現這種情況)。

JDK 1.8 之前永久代還沒被徹底移除的時候通常通過下面這些參數來調節方法區大小

-XX:PermSize=N //方法區 (永久代) 初始大小
-XX:MaxPermSize=N //方法區 (永久代) 最大大小,超過這個值將會拋出 OutOfMemoryError 異常:java.lang.OutOfMemoryError: PermGen

相對而言,垃圾收集行為在這個區域是比較少出現的,但并非數據進入方法區后就“永久存在”了。

JDK 1.8 的時候,方法區(HotSpot 的永久代)被徹底移除了(JDK1.7 就已經開始了),取而代之是元空間,元空間使用的是直接內存。

下面是一些常用參數:

-XX:MetaspaceSize=N //設置 Metaspace 的初始(和最小大小)
-XX:MaxMetaspaceSize=N //設置 Metaspace 的最大大小,如果不指定大小的話,隨著更多類的創建,虛擬機會耗盡所有可用的系統內存。

3.垃圾收集相關

3.1.垃圾回收器

為了提高應用程序的穩定性,選擇正確的垃圾收集算法至關重要。

JVM具有四種類型的GC實現:

  • 串行垃圾收集器
  • 并行垃圾收集器
  • CMS垃圾收集器
  • G1垃圾收集器

可以使用以下參數聲明這些實現:

-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+USeParNewGC
-XX:+UseG1GC

有關垃圾回收實施的更多詳細信息,請參見此處。

3.2.GC記錄

為了嚴格監控應用程序的運行狀況,我們應該始終檢查JVM的垃圾回收性能。最簡單的方法是以人類可讀的格式記錄GC活動。

使用以下參數,我們可以記錄GC活動:

-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=< number of log files > 
-XX:GCLogFileSize=< file size >[ unit ]
-Xloggc:/path/to/gc.log

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42127.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux系統之安裝my-mind思維導圖工具

Linux系統之安裝my-mind思維導圖工具 一、my-mind介紹二、本地環境介紹2.1 本地環境規劃2.2 本次實踐介紹 三、檢查本地環境3.1 檢查本地操作系統版本3.2 檢查系統內核版本3.3 檢查端口占用情況 四、安裝httpd4.1 檢查本地yum倉庫4.2 安裝httpd4.3 關閉防火墻和selinux4.4 創建…

arcgis數據采集與拓撲檢查

1、已準備好一張配準好的浙江省行政區劃圖&#xff0c;如下&#xff1a; 2、現在需要繪制湖州市縣級行政區劃。需要右擊文件夾新建文件地理數據庫&#xff0c;如下&#xff1a; 其余步驟均默認即可。 創建好縣級要素數據集后&#xff0c;再新建要素類&#xff0c;命名為縣。 為…

【Java 動態數據統計圖】動態數據統計思路案例(動態,排序,containsKey)五(117)

需求&#xff1a;前端根據后端的返回數據&#xff1a;畫統計圖&#xff1b; 1.動態獲取地域數據以及數據中的平均值&#xff0c;按照平均值降序排序&#xff1b; 說明&#xff1a; X軸是動態的&#xff0c;有對應區域數據則展示&#xff1b; X軸 區域數據降序排序&#xff1b;…

03-第一個Spark程序WordCount

Scala版 1&#xff09;創建項目 增加 Scala 插件 Spark 由 Scala 語言開發的&#xff0c;咱們當前使用的 Spark 版本為 3.2.0&#xff0c;默認采用的 Scala 編譯版本為 2.13&#xff0c;所以后續開發時。我們依然采用這個版本。開發前請保證 IDEA 開發工具中含有 Scala 開發…

ebay燈串UL報告 UL588檢測標準

季節性和裝飾性照明用品即燈串以及配件都是便攜式插頭連接的臨時性商品&#xff0c;最大額定輸入電壓為 120 伏。 由 ILAC ISO 17025 認證的實驗室出具的檢測報告&#xff0c;確認每件商品均已經過檢測&#xff0c;符合下列要求&#xff1a; 季節性和裝飾性照明用品(燈串&…

企業中商業智能BI,常見的工具和技術

商業智能&#xff08;Business Intelligence&#xff0c;簡稱BI&#xff09;數據可視化是通過使用圖表、圖形和其他可視化工具來呈現和解釋商業數據的過程。它旨在幫助組織更好地理解和分析他們的數據&#xff0c;從而做出更明智的商業決策。 常見的商業智能數據可視化工具和技…

AtcoderABC222場

A - Four DigitsA - Four Digits 題目大意 給定一個整數N&#xff0c;其范圍在0到9999之間&#xff08;包含邊界&#xff09;。在將N轉換為四位數的字符串后&#xff0c;輸出它。如果N的位數不足四位&#xff0c;則在前面添加必要數量的零。 思路分析 可以使用輸出流的格式設…

鼠標樣式和指向

學習抖音&#xff1a; 渡一前端教科頻道 圖上指針跟著鼠標移動&#xff0c;并且改變方向 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><style>* {padding: 0;margin: 0;}.arrow {position: fixed;width: 3…

Spring Clould 消息隊列 - RabbitMQ

視頻地址&#xff1a;微服務&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初識MQ-同步通訊的優缺點&#xff08;P61&#xff0c;P62&#xff09; 同步和異步通訊 微服務間通訊有同步和異步兩種方式&#xff1a; 同步通訊&#xff1a;就像打電話&…

數據庫名字添加中文

Jetbrains 可以呀&#xff0c;這個ui 相當棒 from database import Sqlite3Database from googletrans import Translator import csvif __name__ "__main__":TRANS_EN2ZH Falsetranslator Translator()sqlite Sqlite3Database("./drurmu.db")sqlite.r…

x.view(a,b)及x = x.view(x.size(0), -1) 的理解說明

x.view()就是對tensor進行reshape&#xff1a; 我們在創建一個網絡的時候&#xff0c;會在Foward函數內看到view的使用。 首先這里是一個簡單的網絡&#xff0c;有卷積和全連接組成。它的foward函數如下&#xff1a; class NET(nn.Module):def __init__(self,batch_size):sup…

小米交卷大模型,全新小愛同學實測來了

本文源自&#xff1a;量子位 果然只有雷軍和小米&#xff0c;能搶走風口上大模型的熱度。 在雷軍的年度演講分享中&#xff0c;講武大求學經歷&#xff0c;分享學霸4年大學2年完課經驗&#xff1b;講被《硅谷之火》點燃&#xff0c;勤奮練習寫最好的代碼&#xff0c;開啟第一…

armbian使用1panel快速部署部署springBoot項目后端

文章目錄 前言環境準備實現步驟第一步&#xff1a;Armbian安裝1panel第二步&#xff1a;安裝數據庫第三步&#xff1a;查看數據庫容器重要信息【重要】查看容器所在的網絡查看容器連接地址 第四步&#xff1a;項目配置和打包第五步:構建項目鏡像 前言 這里只是簡單記錄部署spr…

一次性解決office部署問題(即點即用等)

前言 因為之前電腦安裝了office2019&#xff0c;后面需要安裝Visio&#xff0c;下載安裝時報錯30204-44,查看發現之前安裝的office版本是即點即用版&#xff0c;可能這兩者不兼容。網上搜索教程等&#xff0c;最后發現一個工具&#xff1a;Office Tool Plus&#xff0c;可以方便…

【水文學法總結】河道內生態流量計算方法(含MATLAB實現代碼)

生態流量&#xff08;Ecological Flow, EF&#xff09; 是指維持河道內生態環境所需要的水流流量。生態流量計算方法眾多&#xff0c;主要分為水文學方法、棲息地模擬法、水力學方法、整體法等&#xff0c;各方法多用于計算維持河道生態平衡的最小生態流量&#xff08;Minimum …

LeetCode 141.環形鏈表

文章目錄 &#x1f4a1;題目分析&#x1f4a1;解題思路&#x1f514;接口源碼&#x1f4a1;深度思考?思考1?思考2 題目鏈接&#x1f449; LeetCode 141.環形鏈表&#x1f448; &#x1f4a1;題目分析 給你一個鏈表的頭節點 head &#xff0c;判斷鏈表中是否有環。 如果鏈表中…

【ES6】—let 聲明方式

一、不屬于頂層對象window let 關鍵字聲明的變量&#xff0c;不會掛載到window的屬性 var a 5 console.log(a) console.log(window.a) // 5 // 5 // 變量a 被掛載到window屬性上了 &#xff0c; a window.alet b 6 console.log(b) console.log(window.b) // 6 // undefin…

原生js獲取今天、昨天、近7天的時間(年月日時分秒)

有的時候我們需要將今天,昨天,近7天的時間(年月日時分秒)作為參數傳遞給后端,如下圖: 那怎么生成這些時間呢?如下代碼里,在methods里的toDay方法、yesterDay方法、weekDay方法分別用于生成今天、昨天和近7天的時間: <template><div class="box"&…

暫停Windows更新的方法,可延后數十萬年,簡單且有手就行

前言 近年來&#xff0c;Windows更新頻率過快&#xff0c;最大只能暫停更新5周&#xff0c;導致用戶不厭其煩&#xff0c;從網上找到的暫停更新的方法不是過于繁瑣就是毫無效果&#xff0c;或者是暫停的時間有限&#xff0c;無意中發現一個大神的帖子可以通過修改注冊表信息以達…