91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JDK1.8中JVM架構調整、分析與調優的示例分析

發布時間:2021-12-17 13:47:10 來源:億速云 閱讀:293 作者:小新 欄目:大數據

小編給大家分享一下JDK1.8中JVM架構調整、分析與調優的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

一.JVM空間說明

  1. JDK 1.7及以前,Java 類信息、常量池、靜態變量都存儲在 Perm(永久代)里。類的元數據和靜態變量在類加載的時候分配到 Perm,當類被卸載的時候垃圾收集器從 Perm 處理掉。

  2. JDK 1.8 的對 JVM 架構的改造將類元數據放到本地內存中,另外,將常量池靜態變量放到 Java 堆里。HotSopt VM 將會為類的元數據明確分配和釋放本地內存。在這種架構下,類元信息就突破了原來 -XX:MaxPermSize 的限制,所以PermSize的配置也是無效的,現在可以使用更多的本地內存。這樣就從一定程度上解決了原來在運行時生成大量類的造成經常 Full GC 問題,如運行時使用反射、代理等

JDK1.8中JVM架構調整、分析與調優的示例分析

干貨:可以發現最明顯的一個變化是  元空間從虛擬機轉移到本地內存;默認情況下,元空間的大小僅受本地內存的限制。這意味著以后不會因為永久代空間不夠而拋出OOM異常了。  
jdk1.8以前版本的class和jar包數據存儲在permGen下面 ,permGen大小是固定的,而且項目之間無法共用公有的class,所以很容易碰到OOM異常。  
改成metaSpaces后,各個項目會共享同樣的class內存空間,比如多個項目都引用了apache-common包,在metaSpaces中只會存儲一份apache-common的class,提高了內存的利用率,垃圾回收更有效率。

二.JVM參數配置

  1. 在jdk1.8以前,生產環境一般有如下配置

    -XX:PermSize=512M -XX:MaxPermSize=1024M


表示在JVM里存儲Java類信息,常量池和靜態變量的永久代區域初始大小為512M,最大為1024M。在項目啟動后,這個值是固定的,如果項目class過多,很可能遇到  OutOfMemoryError: PermGen異常。


2、升級JDK1.8之后,上面的perm配置已經變成

-XX:MetaspaceSize=512M XX:MaxMetaspaceSize=1024M

MetaspaceSize如果不做配置,通過jinfo查看默認MetaspaceSize大小(約21M),MaxMetaspaceSize很大很大,前面說過MetaSpace只受本地內存大小限制。

jinfo -flag MetaspaceSize 1234  #結果為:-XX:MetaspaceSize=21807104
jinfo -flag MaxMetaspaceSize 1234 #結果為:-XX:MaxMetaspaceSize=18446744073709547520

 干貨:MetaspaceSize為出發FullGC的閾值,默認約為21M,如做了配置,最小閾值為自定義配置大小。空間使用達到閾值,觸發FullGC,同時對該值擴大。當然如果元空間實際使用小于閾值,在GC的時候也會對該值縮小。
MaxMetaspaceSize為元空間的最大值,如果設置太小,可能會導致頻繁FullGC,甚至OOM。

三.GC(GarbageCollection)過程

首先貼一張網上盜來的大圖,用它來說明下GC的過程再合適不過。

JDK1.8中JVM架構調整、分析與調優的示例分析

  • 新new的對象都放在Eden區(伊甸園嘛,創造的地方

  • Eden區滿或者快滿的時候進行一次清理(Minor Gc),不被引用的對象直接被干掉;還有引用的對象,但是年齡比較大的,挪到S0區

  • 下次Eden區快滿的時候,會進行上一步的操作,并且將Eden和S0區的年紀大的對象放到S1區【原理上隨時保持S0和S1有一個是空的,用來存下一次的對象】

  • 下下次,Eden區快滿的時候,會進行上一步操作,并且將Eden和S1區的年紀大的對象放到S0區【此時S1區就是空的】

  • 直到Eden區快滿,S0或者S1也快滿的時候,這時候就把這兩個區的年紀大的對象放到Old區

  • 依次循環,直到Old區也快滿的時候,Eden區也快滿的時候,會對整個這一塊內存區域進行一次大清洗(FullGC),騰出內存,為之后的對象創建,程序運行騰地方。

清理Eden區和Survivor區叫Minor GC;清理Old區叫Major GC;清理整個堆空間—包括年輕代和老年代叫Full GC

四. JVM參數配置指南

前面三個部分對JVM進行了整體的了解,接下來是本文的重點。

-XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -Xms256m -Xmx256m

文章看下來上面這段配置的意思很簡單,設置元空間的初始值和最大值,設置堆空間的初始值和最大值。

為什么MetaspaceSize要設置為128M?為什么堆內存初始值Xms設置為256M而不是512M?

按照Java官方的指導

JDK1.8中JVM架構調整、分析與調優的示例分析

  • Java堆大小設置,Xms 和 Xmx設置為老年代存活對象的3-4倍,即FullGC之后的老年代內存占用的3-4倍
    永久代 PermSize和MaxPermSize(元空間)設置為老年代存活對象的1.2-1.5倍。
    年輕代Xmn的設置為老年代存活對象的1-1.5倍。
    老年代的內存大小設置為老年代存活對象的2-3倍。

可以讓系統運行一段時間后查看系統的各個指標,然后在進行配置。如下用jstat工具查看jvm的情況

jstat -gc 12345
###
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
13824.0 22528.0 13377.0  0.0   548864.0 535257.2  113152.0   46189.3   73984.0 71119.8 9728.0 9196.2     14    0.259   3      0.287    0.546

OU表示老年代所占用的內存為 46189.3 K(大約45M);那么jvm相應的配置參數應該做如下修改 

-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M -Xms180m -Xmx180m

看完了這篇文章,相信你對“JDK1.8中JVM架構調整、分析與調優的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

杨浦区| 宁蒗| 闽侯县| 化德县| 依兰县| 景洪市| 富阳市| 怀安县| 赞皇县| 旺苍县| 天镇县| 广州市| 赣州市| 合水县| 渑池县| 大丰市| 西峡县| 久治县| 醴陵市| 鲁甸县| 介休市| 永兴县| 铜鼓县| 宁夏| 司法| 九龙县| 锦屏县| 昌江| 德钦县| 庐江县| 灵璧县| 朝阳市| 万全县| 通城县| 乌兰浩特市| 诸城市| 新宾| 达日县| 平顶山市| 长顺县| 扬州市|