亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
JVM參數(shù)分類 " >JVM參數(shù)分類
#堆參數(shù)設(shè)定 " >#堆參數(shù)設(shè)定
元空間參數(shù) " >元空間參數(shù)
堆疊參數(shù)設(shè)定 " >堆疊參數(shù)設(shè)定
收集器參數(shù)設(shè)定 " >收集器參數(shù)設(shè)定
GC策略參數(shù)配置" >GC策略參數(shù)配置
Dump異??煺?/span> " >Dump異常快照
8G內(nèi)存的服務(wù)器該如何設(shè)置 " >8G內(nèi)存的服務(wù)器該如何設(shè)置
項目中,GC日志配置 " >項目中,GC日志配置
首頁 Java Java面試題 美團面試:熟悉哪些JVM調(diào)校參數(shù),幸好我準備過!

美團面試:熟悉哪些JVM調(diào)校參數(shù),幸好我準備過!

Aug 24, 2023 pm 03:25 PM
jvm優(yōu)化 jvm調(diào)用


美團面試:熟悉哪些JVM調(diào)校參數(shù),幸好我準備過!
img

#今天來熟悉一下,關(guān)於JVM調(diào)優(yōu)常用的一些參數(shù)。

X或XX開頭的都是非標準化參數(shù)

美團面試:熟悉哪些JVM調(diào)校參數(shù),幸好我準備過!

意思就是說標準化參數(shù)不會改變,非標準化參數(shù)可能在每個JDK 版本中有所變化,但是就目前來看X開頭的非標準化的參數(shù)改變的也是非常少。

格式:-XX:[+-]<name> 表示啟用或者禁用name屬性。
例子:-XX:+UseG1GC(表示啟用G1垃圾收集器)

-XX: PrintCommandLineFlags查看目前JVM設(shè)定過的相關(guān)參數(shù):

美團面試:熟悉哪些JVM調(diào)校參數(shù),幸好我準備過!

JVM參數(shù)分類

#根據(jù)JVM參數(shù)開頭可以區(qū)分參數(shù)類型,共三類別:“-”、“-X”、“-XX”,

標準參數(shù)(-):所有的JVM實作都必須實作這些參數(shù)的功能,而且向後相容;

範例:-verbose:class,-verbose:gc,-verbose:jni… …

非標準參數(shù)(-X):預(yù)設(shè)jvm實作這些參數(shù)的功能,但並不保證所有jvm實作都滿足,且不保證向後相容;

例子:Xms20m,-Xmx20m,-Xmn20m,-Xss128k…

#非Stable參數(shù)(-XX) :此類參數(shù)各個jvm實作會有所不同,將來可能隨時取消,需要慎重使用;

範例:-XX: PrintGCDetails,-XX:-UseParallelGC-XX: PrintGCTimeStamps…

#堆參數(shù)設(shè)定

-Xms 初始堆大小,ms是memory start的簡稱,等價於-XX:InitialHeapSize-Xmx 最大堆大小,mx是memory max的簡稱,等價於參數(shù)-XX:MaxHeapSize

注意:在通常情況下,伺服器項目在運作過程中,堆空間會持續(xù)的收縮與擴張,勢必會造成不必要的系統(tǒng)壓力。

所以在生產(chǎn)環(huán)境中,JVMXmsXmx要設(shè)定成大小一樣的,能夠避免GC在調(diào)整堆大小帶來的不必要的壓力。

-XX:NewSize=n 設(shè)定年輕代大小-XX:NewRatio=n 設(shè)定年輕代和年老代的比值。

如:-XX:NewRatio=3,表示年輕代與年老代比值為1:3,年輕代佔整個年輕代年老代和的1/4,預(yù)設(shè)新生代和老年代的比例=1:2。 -XX:SurvivorRatio=n 年輕代中Eden區(qū)與兩個Survivor區(qū)的比值。

注意Survivor區(qū)有兩個,預(yù)設(shè)是8,表示:Eden:S0:S1=8:1:1

如:-XX: SurvivorRatio=3,表示Eden:Survivor=3:2,一個Survivor區(qū)佔整個年輕代的1/5。

元空間參數(shù)

-XX:MetaspaceSizeMetaspace 空間初始大小,如果不設(shè)定的話,預(yù)設(shè)是20.79M,這個初始大小是觸發(fā)首次Metaspace Full GC的閾值。

例如:-XX:MetaspaceSize=256M

-XX:MaxMetaspaceSizeMetaspace 最大值,預(yù)設(shè)不限制大小,但是線上環(huán)境建議設(shè)定。

例如:-XX:MaxMetaspaceSize=256M

-XX:MinMetaspaceFreeRatio:最小空閒比,當Metaspace 發(fā)生GC 後,會計算Metaspace 的空閒比,如果空閒比(空閒空間/目前Metaspace 大小)小於此值,就會觸發(fā)Metaspace 擴充。預(yù)設(shè)值是40 ,也就是40%,例如-XX:MinMetaspaceFreeRatio=40

-XX:MaxMetaspaceFreeRatio:最大空閒比,當Metaspace發(fā)生GC 後,會計算Metaspace 的空閒比,如果空閒比(空閒空間/目前Metaspace 大小)大於此值,就會觸發(fā)Metaspace 釋放空間。預(yù)設(shè)值是 70 ,也就是 70%,例如 -XX:MaxMetaspaceFreeRatio=70

建議將 MetaspaceSizeMaxMetaspaceSize設(shè)定為相同大小,避免頻繁擴容。

堆疊參數(shù)設(shè)定

#-Xss:堆疊空間大小,堆疊是執(zhí)行緒獨佔的,所以是一個執(zhí)行緒使用堆疊空間的大小。

例如:-Xss256K,如果不設(shè)定此參數(shù),預(yù)設(shè)值是1M,一般來講設(shè)定成 256K 就夠了。

收集器參數(shù)設(shè)定

Serial垃圾收集器(新世代)

開啟:-XX: UseSerialGC 關(guān)閉:-XX:-UseSerialGC //新生代使用Serial ?老年代則使用SerialOld

ParNew垃圾收集器(新生代)

開啟 -XX: UseParNewGC 關(guān)閉 -XX:-UseParNewGC //新生代使用功能ParNew 老年代則使用功能CMS

Parallel Scavenge收集器(新生代)

開啟 -XX: UseParallelOldGC 關(guān)閉 -XX:-UseParallelOldGC //新生代使用功能Parallel Scavenge 老年代將會使用Parallel Old收集器

#ParallelOl垃圾收集器(舊年代)

開啟 -XX: UseParallelGC 關(guān)閉 -XX:-UseParallelGC //新生代使用功能Parallel Scavenge 老年代將會使用Parallel Old收集器

CMS垃圾收集器(老年代)

開 -XX: UseConcMarkSweepGC 關(guān)閉 -XX:-UseConcMarkSweepGC

G1垃圾收集器

開啟 -XX: UseG1GC 關(guān)閉-XX:-UseG1GC

GC策略參數(shù)配置

#GC停頓時間,垃圾收集器會嘗試用各種手段達到這個時間,例如減小年輕代

-XX:MaxGCPauseMillis

堆佔用了多少比例的時候觸發(fā)GC,就即觸發(fā)標記週期的Java 堆佔用率閾值。預(yù)設(shè)佔用率是整個Java 堆的45%

-XX:InitiatingHeapOccupancyPercent=n

新生代可容納的最大物件,大於則直接會分配到老年代,0代表沒有限制。

-XX:PretenureSizeThreshold=1000000 //

進入老年代最小的GC年齡,年輕代物件轉(zhuǎn)換為老年代物件最小年齡值,預(yù)設(shè)值7

-XX:InitialTenuringThreshol=7

#升級老年代年齡,最大值15

-XX:MaxTenuringThreshold

GC並行執(zhí)行執(zhí)行緒數(shù)

##-XX: ParallelGCThreads=16

停用System.gc(),由於方法預(yù)設(shè)會觸發(fā)FGC,並且忽略參數(shù)中的UseG1GC 和UseConcMarkSweepGC,因此必要時可以停用該方法。

-XX:- DisableExplicitGC

設(shè)定吞吐量大小,預(yù)設(shè)99

XX:GCTimeRatio

#開啟自適應(yīng)策略,各區(qū)域的比率,晉升老年代的年齡等參數(shù)會被自動調(diào)整。以達到吞吐量,停頓時間的平衡點。

XX:UseAdaptiveSizePolicy

設(shè)定GC時間佔用程式運行時間的百分比

GCTimeRatio

Dump異??煺?/span>

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

堆內(nèi)存出現(xiàn)OOM的概率是所有內(nèi)存耗盡異常中最高的,出錯時的堆內(nèi)信息對解決問題非常有幫助。

所以給JVM設(shè)置這個參數(shù)(-XX:+HeapDumpOnOutOfMemoryError),讓JVM遇到OOM異常時能輸出堆內(nèi)信息,并通過(-XX:+HeapDumpPath)參數(shù)設(shè)置堆內(nèi)存溢出快照輸出的文件地址。

這對于特別是對相隔數(shù)月才出現(xiàn)的OOM異常尤為重要。

-Xms10M -Xmx10M -Xmn2M -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=D:\study\log_hprof\gc.hprof

-XX:OnOutOfMemoryError

表示發(fā)生OOM后,運行jconsole.exe程序。

這里可以不用加“”,因為jconsole.exe路徑Program Files含有空格。利用這個參數(shù),我們可以在系統(tǒng)OOM后,自定義一個腳本,可以用來發(fā)送郵件告警信息,可以用來重啟系統(tǒng)等等。

-XX:OnOutOfMemoryError="C:\Program Files\Java\jdk1.8.0_151\bin\jconsole.exe"

8G內(nèi)存的服務(wù)器該如何設(shè)置

java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0

-Xmx3500m 設(shè)置JVM最大可用內(nèi)存為3550M。

-Xms3500m 設(shè)置JVM初始內(nèi)存為3550m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。-Xmn2g 設(shè)置年輕代大小為2G。

整個堆大小=年輕代大小 + 年老代大小 + 方法區(qū)大小

-Xss128k 設(shè)置每個線程的堆棧大小。

JDK1.5以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。更具應(yīng)用的線程所需內(nèi)存大小進行調(diào)整。在相同物理內(nèi)存下,減小這個值能生成更多的線程。但是操作系統(tǒng)對一個進程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗值在3000~5000左右。

-XX:NewRatio=4 設(shè)置年輕代(包括Eden和兩個Survivor區(qū))與年老代的比值(除去持久代)。設(shè)置為4,則年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5 。

-XX:SurvivorRatio=4 設(shè)置年輕代中Eden區(qū)與Survivor區(qū)的大小比值。

設(shè)置為4,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:4,一個Survivor區(qū)占整個年輕代的1/6 -XX:MaxPermSize=16m 設(shè)置持久代大小為16m。

-XX:MaxTenuringThreshold=0 設(shè)置垃圾最大年齡。

如果設(shè)置為0的話,則年輕代對象不經(jīng)過Survivor區(qū),直接進入年老代。對于年老代比較多的應(yīng)用,可以提高效率。如果將此值設(shè)置為一個較大值,則年輕代對象會在Survivor區(qū)進行多次復(fù)制,這樣可以增加對象在年輕代的存活時間,增加在年輕代即被回收的概論。

項目中,GC日志配置

比如,我們啟動一個user-service項目:

 java  
 -XX:+PrintGCDetails -XX:+PrintGCDateStamps 
 -XX:+UseGCLogFileRotation 
 -XX:+PrintHeapAtGC -XX:NumberOfGCLogFiles=5  
 -XX:GCLogFileSize=20M    
 -Xloggc:/opt/user-service-gc-%t.log  
 -jar user-service-1.0-SNAPSHOT.jar

參數(shù)解釋:

 -Xloggc:/opt/app/ard-user/user-service-gc-%t.log   設(shè)置日志目錄和日志名稱
 -XX:+UseGCLogFileRotation           開啟滾動生成日志
 -XX:NumberOfGCLogFiles=5            滾動GC日志文件數(shù),默認0,不滾動
 -XX:GCLogFileSize=20M               GC文件滾動大小,需開啟UseGCLogFileRotation
 -XX:+PrintGCDetails                 開啟記錄GC日志詳細信息(包括GC類型、各個操作使用的時間),并且在程序運行結(jié)束打印出JVM的內(nèi)存占用情況
 -XX:+ PrintGCDateStamps             記錄系統(tǒng)的GC時間           
 -XX:+PrintGCCause                   產(chǎn)生GC的原因(默認開啟)

項目中沒用過怎么辦?

對于很多沒用過的人來說,面試官問項目中這些參數(shù)是怎么用?此時,很容易選擇妥協(xié),傻傻的回答沒用過。

偷偷的告訴你,很多面試官也沒有用過。

另外,你可以自己搞個小項目,把JVM參數(shù)設(shè)置小點,使用測試工具JMeter,多線程測試一下。

以上是美團面試:熟悉哪些JVM調(diào)校參數(shù),幸好我準備過!的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72