JDK8部分JVM參數(shù)說明(二)

      網(wǎng)友投稿 1405 2022-05-30

      高級(jí)JIT編譯器選項(xiàng)

      這些選項(xiàng)控制Java HotSpot VM執(zhí)行的動(dòng)態(tài)即時(shí)(JIT)編譯。

      -XX:+ AggressiveOpts

      允許使用積極的性能優(yōu)化功能,這些功能有望在即將發(fā)布的版本中成為默認(rèn)功能。默認(rèn)情況下,禁用此選項(xiàng)并且不使用實(shí)驗(yàn)性能功能。

      -XX:AllocateInstancePrefetchLines =?lines

      設(shè)置在實(shí)例分配指針之前預(yù)取的行數(shù)。默認(rèn)情況下,預(yù)取的行數(shù)設(shè)置為1:

      -XX:AllocateInstancePrefetchLines?=?1

      只有Java HotSpot Server VM支持此選項(xiàng)。

      -XX:AllocatePrefetchDistance =?size

      設(shè)置對(duì)象分配的預(yù)取距離的大小(以字節(jié)為單位)。將從最后分配的對(duì)象的地址開始預(yù)取將要使用新對(duì)象的值寫入的內(nèi)存。每個(gè)Java線程都有自己的分配點(diǎn)。

      負(fù)值表示基于平臺(tái)選擇預(yù)取距離。正值是預(yù)取的字節(jié)數(shù)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。默認(rèn)值設(shè)置為-1。

      以下示例顯示如何將預(yù)取距離設(shè)置為1024字節(jié):

      -XX:AllocatePrefetchDistance?=?1024

      只有Java HotSpot Server VM支持此選項(xiàng)。

      -XX:AllocatePrefetchInstr =?指令

      將預(yù)取指令設(shè)置為在分配指針之前預(yù)取。只有Java HotSpot Server VM支持此選項(xiàng)。可能的值為0到3.值后面的實(shí)際指令取決于平臺(tái)。默認(rèn)情況下,預(yù)取指令設(shè)置為0:

      -XX:AllocatePrefetchInstr?=?0

      只有Java HotSpot Server VM支持此選項(xiàng)。

      -XX:AllocatePrefetchLines =?lines

      使用編譯代碼中生成的預(yù)取指令設(shè)置在最后一次對(duì)象分配后要加載的高速緩存行數(shù)。如果最后分配的對(duì)象是實(shí)例,則默認(rèn)值為1;如果是數(shù)組,則默認(rèn)值為3。

      以下示例顯示如何將加載的緩存行數(shù)設(shè)置為5:

      -XX:AllocatePrefetchLines?=?5

      只有Java HotSpot Server VM支持此選項(xiàng)。

      -XX:AllocatePrefetchStepSize =?size

      設(shè)置順序預(yù)取指令的步長(zhǎng)(以字節(jié)為單位)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。默認(rèn)情況下,步長(zhǎng)設(shè)置為16個(gè)字節(jié):

      -XX:AllocatePrefetchStepSize?=?16

      只有Java HotSpot Server VM支持此選項(xiàng)。

      -XX:AllocatePrefetchStyle =?style

      為預(yù)取指令設(shè)置生成的代碼樣式。的風(fēng)格參數(shù)是從0至3的整數(shù):

      只有Java HotSpot Server VM支持此選項(xiàng)。

      0

      不要生成預(yù)取指令。

      1

      每次分配后執(zhí)行預(yù)取指令。這是默認(rèn)參數(shù)。

      2

      使用線程局部分配塊(TLAB)水印指針來確定何時(shí)執(zhí)行預(yù)取指令。

      3

      在SPARC上使用BIS指令進(jìn)行分配預(yù)取。

      -XX:+ BackgroundCompilation

      啟用后臺(tái)編譯。默認(rèn)情況下啟用此選項(xiàng)。要禁用后臺(tái)編譯,請(qǐng)指定-XX:-BackgroundCompilation(這相當(dāng)于指定-Xbatch)。

      -XX:CICompilerCount =?threads

      設(shè)置用于編譯的編譯器線程數(shù)。默認(rèn)情況下,服務(wù)器JVM的線程數(shù)設(shè)置為2,客戶端JVM的線程數(shù)設(shè)置為1,如果使用分層編譯,則會(huì)擴(kuò)展為核心數(shù)。以下示例顯示如何將線程數(shù)設(shè)置為2:

      -XX:CICompilerCount?=?2

      -XX:CodeCacheMinimumFreeSpace =?size

      設(shè)置編譯所需的最小可用空間(以字節(jié)為單位)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。當(dāng)剩余小于最小可用空間時(shí),編譯停止。默認(rèn)情況下,此選項(xiàng)設(shè)置為500 KB。以下示例顯示如何將最小可用空間設(shè)置為1024 MB:

      -XX:CodeCacheMinimumFreeSpace?=1024米

      -XX:CompileCommand =?command,method?[,option?]

      指定要對(duì)方法執(zhí)行的命令。例如,要排除編譯類的indexOf()方法String,請(qǐng)使用以下命令:

      -XX:CompileCommand?=排除,爪哇/郎/?String.indexOf

      請(qǐng)注意,指定了完整的類名,包括由斜杠(/)分隔的所有包和子包。為了便于剪切和粘貼操作,還可以使用-XX:+PrintCompilation和-XX:+LogCompilation選項(xiàng)生成的方法名稱格式:

      -XX:CompileCommand?=排除,java.lang.String中的indexOf?::

      如果在沒有簽名的情況下指定方法,則該命令將應(yīng)用于具有指定名稱的所有方法。但是,您也可以在類文件格式中指定方法的簽名。在這種情況下,您應(yīng)該將參數(shù)括在引號(hào)中,否則shell會(huì)將分號(hào)視為命令end。例如,如果要僅排除編譯類的indexOf(String)方法String,請(qǐng)使用以下命令:

      -XX:CompileCommand?=?“排除,爪哇/郎/?String.indexOf,(Ljava?/郎/字符串;)I”

      您還可以使用星號(hào)(*)作為類和方法名稱的通配符。例如,要排除indexOf()編譯所有類中的所有方法,請(qǐng)使用以下命令:

      -XX:CompileCommand?=排除*的indexOf。

      逗號(hào)和句點(diǎn)是空格的別名,使得通過shell傳遞編譯器命令更容易。您可以通過-XX:CompileCommand將參數(shù)括在引號(hào)中來將參數(shù)傳遞給使用空格作為分隔符:

      -XX:CompileCommand?=“exclude?java?/?lang?/?String?indexOf”

      請(qǐng)注意,在使用-XX:CompileCommand選項(xiàng)解析在命令行上傳遞的命令之后,JIT編譯器會(huì)從.hotspot_compiler文件中讀取命令。您可以向此文件添加命令,也可以使用該-XX:CompileCommandFile選項(xiàng)指定其他文件。

      要添加多個(gè)命令,請(qǐng)-XX:CompileCommand多次指定該選項(xiàng),或使用換行符分隔符(\n)分隔每個(gè)參數(shù)。可以使用以下命令:

      打破

      在調(diào)試JVM時(shí)設(shè)置斷點(diǎn),以便在編譯指定方法的開始時(shí)停止。

      compileonly

      除了指定的方法之外,從編譯中排除所有方法。作為替代方法,您可以使用該-XX:CompileOnly選項(xiàng),該選項(xiàng)允許指定多種方法。

      dontinline

      防止內(nèi)聯(lián)指定的方法。

      排除

      從編譯中排除指定的方法。

      救命

      打印該-XX:CompileCommand選項(xiàng)的幫助消息。

      排隊(duì)

      嘗試內(nèi)聯(lián)指定的方法。

      日志

      排除-XX:+LogCompilation除指定方法之外的所有方法的編譯日志記錄(帶選項(xiàng))。默認(rèn)情況下,對(duì)所有已編譯的方法執(zhí)行日志記錄。

      選項(xiàng)

      此命令可用于將JIT編譯選項(xiàng)傳遞給指定的方法以代替最后一個(gè)參數(shù)(選項(xiàng))。編譯選項(xiàng)在方法名稱后面的末尾設(shè)置。例如,要啟用類方法的BlockLayoutByFrequency選項(xiàng),請(qǐng)使用以下命令:append()StringBuffer

      -XX:CompileCommand?=選項(xiàng),爪哇/郎/的StringBuffer.append,BlockLayoutByFrequency

      您可以指定多個(gè)編譯選項(xiàng),以逗號(hào)或空格分隔。

      打印

      在編譯指定方法后打印生成的匯編代碼。

      安靜

      不要打印編譯命令。默認(rèn)情況下,使用 -?XX:CompileCommand選項(xiàng)指定的命令將被打印;?例如,如果從編譯中排除類的indexOf()方法String,則以下內(nèi)容將打印到標(biāo)準(zhǔn)輸出:

      CompilerOracle:排除java?/?lang?/?String.indexOf

      您可以通過-XX:CompileCommand=quiet在其他選項(xiàng)之前指定選項(xiàng)來抑制此操作-XX:CompileCommand。

      -XX:CompileCommandFile =?filename

      設(shè)置從中讀取JIT編譯器命令的文件。默認(rèn)情況下,該.hotspot_compiler文件用于存儲(chǔ)JIT編譯器執(zhí)行的命令。

      命令文件中的每一行代表一個(gè)命令,一個(gè)類名和一個(gè)使用該命令的方法名。例如,此行打印類的toString()方法的匯編代碼String:

      print?java?/?lang?/?String?toString

      有關(guān)為JIT編譯器指定要對(duì)方法執(zhí)行的命令的更多信息,請(qǐng)參閱該-XX:CompileCommand選項(xiàng)。

      -XX:CompileOnly =?方法

      設(shè)置應(yīng)限制編譯的方法列表(以逗號(hào)分隔)。僅編譯指定的方法。使用完整的類名(包括包和子包)指定每個(gè)方法。例如,為了僅編譯length()所述的方法String類和size()所述的方法List類,使用以下:

      -XX:CompileOnly?=爪哇/郎/?string.length減,JAVA?/?UTIL?/則為list.size

      請(qǐng)注意,指定了完整的類名,包括由斜杠(/)分隔的所有包和子包。為了便于剪切和粘貼操作,還可以使用-XX:+PrintCompilation和-XX:+LogCompilation選項(xiàng)生成的方法名稱格式:

      -XX:CompileOnly?=?java.lang.String中::長(zhǎng)度,java.util.List中::大小

      雖然不支持通配符,但您只能指定類或包名稱來編譯該類或包中的所有方法,并且只指定在任何類中使用此名稱編譯方法的方法:

      -XX:CompileOnly?=?java?/?lang?/?String? -XX:CompileOnly?=?java?/?lang? -XX:CompileOnly?=?.length

      -XX:CompileThreshold =?調(diào)用

      設(shè)置編譯前解釋的方法調(diào)用的數(shù)量。默認(rèn)情況下,在服務(wù)器JVM中,JIT編譯器執(zhí)行10,000次解釋方法調(diào)用以收集有效編譯的信息。對(duì)于客戶端JVM,默認(rèn)設(shè)置為1,500次調(diào)用。啟用分層編譯時(shí),將忽略此選項(xiàng);?看到選項(xiàng)-XX:+TieredCompilation。以下示例顯示如何將解釋的方法調(diào)用數(shù)設(shè)置為5,000:

      -XX:CompileThreshold?=?5000

      您可以通過指定-Xcomp選項(xiàng)在編譯之前完全禁用Java方法的解釋。

      -XX:+ DoEscapeAnalysis

      允許使用轉(zhuǎn)義分析。默認(rèn)情況下啟用此選項(xiàng)。要禁用轉(zhuǎn)義分析,請(qǐng)指定-XX:-DoEscapeAnalysis。只有Java HotSpot Server VM支持此選項(xiàng)。

      -XX:InitialCodeCacheSize =?size

      設(shè)置初始代碼高速緩存大小(以字節(jié)為單位)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。默認(rèn)值設(shè)置為500 KB。初始代碼高速緩存大小應(yīng)不小于系統(tǒng)的最小內(nèi)存頁(yè)大小。以下示例顯示如何將初始代碼高速緩存大小設(shè)置為32 KB:

      -XX:InitialCodeCacheSize?=?32K

      -XX:+內(nèi)嵌

      啟用方法內(nèi)聯(lián)。默認(rèn)情況下啟用此選項(xiàng)以提高性能。要禁用方法內(nèi)聯(lián),請(qǐng)指定-XX:-Inline。

      -XX:InlineSmallCode =?size

      設(shè)置應(yīng)內(nèi)聯(lián)的已編譯方法的最大代碼大小(以字節(jié)為單位)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。只有內(nèi)聯(lián)小于指定大小的編譯方法才會(huì)被內(nèi)聯(lián)。默認(rèn)情況下,最大代碼大小設(shè)置為1000字節(jié):

      -XX:InlineSmallCode?=?1000

      -XX:+ LogCompilation

      允許將編譯活動(dòng)記錄到hotspot.log當(dāng)前工作目錄中指定的文件。您可以使用該-XX:LogFile選項(xiàng)指定其他日志文件路徑和名稱。

      默認(rèn)情況下,禁用此選項(xiàng)并且不記錄編譯活動(dòng)。該-XX:+LogCompilation選項(xiàng)必須與-XX:UnlockDiagnosticVMOptions解鎖診斷JVM選項(xiàng)的選項(xiàng)一起使用。

      每次使用該-XX:+PrintCompilation選項(xiàng)編譯方法時(shí),都可以啟用詳細(xì)診斷輸出,并在控制臺(tái)上打印一條消息。

      -XX:MaxInlineSize =?size

      設(shè)置要內(nèi)聯(lián)的方法的最大字節(jié)碼大小(以字節(jié)為單位)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。默認(rèn)情況下,最大字節(jié)碼大小設(shè)置為35個(gè)字節(jié):

      -XX:MaxInlineSize?=?35

      -XX:MaxNodeLimit =?節(jié)點(diǎn)

      設(shè)置單個(gè)方法編譯期間要使用的最大節(jié)點(diǎn)數(shù)。默認(rèn)情況下,最大節(jié)點(diǎn)數(shù)設(shè)置為65,000:

      -XX:MaxNodeLimit?=?65000

      -XX:MaxTrivialSize =?size

      設(shè)置要內(nèi)聯(lián)的簡(jiǎn)單方法的最大字節(jié)碼大小(以字節(jié)為單位)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。默認(rèn)情況下,一個(gè)簡(jiǎn)單方法的最大字節(jié)碼大小設(shè)置為6個(gè)字節(jié):

      -XX:MaxTrivialSize?=?6

      -XX:+ OptimizeStringConcat

      啟用String串聯(lián)操作的優(yōu)化。默認(rèn)情況下啟用此選項(xiàng)。要禁用String串聯(lián)操作的優(yōu)化,請(qǐng)指定-XX:-OptimizeStringConcat。只有Java HotSpot Server VM支持此選項(xiàng)。

      -XX:+ PrintAssembly

      通過使用外部disassembler.so庫(kù),可以為字節(jié)編碼和本機(jī)方法打印匯編代碼。這使您可以查看生成的代碼,這可以幫助您診斷性能問題。

      默認(rèn)情況下,禁用此選項(xiàng)并且不打印匯編代碼。該-XX:+PrintAssembly選項(xiàng)必須與-XX:UnlockDiagnosticVMOptions解鎖診斷JVM選項(xiàng)的選項(xiàng)一起使用。

      -XX:+ PrintCompilation

      每次編譯方法時(shí),通過向控制臺(tái)打印消息,從JVM啟用詳細(xì)診斷輸出。這使您可以查看實(shí)際編譯的方法。默認(rèn)情況下,禁用此選項(xiàng)并且不打印診斷輸出。

      您還可以使用該-XX:+LogCompilation選項(xiàng)將編譯活動(dòng)記錄到文件中。

      -XX:+ PrintInlining

      允許打印內(nèi)聯(lián)決策。這使您可以查看哪些方法被內(nèi)聯(lián)。

      默認(rèn)情況下,禁用此選項(xiàng)并且不打印內(nèi)聯(lián)信息。該-XX:+PrintInlining選項(xiàng)必須與-XX:+UnlockDiagnosticVMOptions解鎖診斷JVM選項(xiàng)的選項(xiàng)一起使用。

      -XX:ReservedCodeCacheSize =?size

      設(shè)置JIT編譯代碼的最大代碼緩存大小(以字節(jié)為單位)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。默認(rèn)的最大代碼緩存大小為240 MB;?如果使用該選項(xiàng)禁用分層編譯-XX:-TieredCompilation,則默認(rèn)大小為48 MB。此選項(xiàng)的限制為2 GB;?否則,會(huì)產(chǎn)生錯(cuò)誤。最大代碼緩存大小不應(yīng)小于初始代碼緩存大小;?看到選項(xiàng)-XX:InitialCodeCacheSize。此選項(xiàng)相當(dāng)于-Xmaxjitcodesize。

      -XX:RTMAbortRatio =?abort_ratio

      RTM中止比率指定為所有已執(zhí)行RTM事務(wù)的百分比(%)。如果許多中止事務(wù)變得大于此比率,則編譯后的代碼將被去優(yōu)化。-XX:+UseRTMDeopt啟用該選項(xiàng)時(shí)將使用此比率。此選項(xiàng)的默認(rèn)值為50.這意味著如果50%的所有事務(wù)都被中止,則編譯后的代碼將被去優(yōu)化。

      -XX:RTMRetryCount =?number_of_retries

      RTM鎖定代碼將在中止或忙碌時(shí)重試此選項(xiàng)指定的次數(shù),然后再回退到正常鎖定機(jī)制。此選項(xiàng)的默認(rèn)值為5.?-XX:UseRTMLocking必須啟用該選項(xiàng)。

      -XX:-TieredCompilation

      禁用分層編譯。默認(rèn)情況下,啟用此選項(xiàng)。只有Java HotSpot Server VM支持此選項(xiàng)。

      -XX:+ UseAES

      為Intel,AMD和SPARC硬件啟用基于硬件的AES內(nèi)在函數(shù)。Intel Westmere(2010及更新版本),AMD Bulldozer(2011及更新版本)以及SPARC(T4及更新版本)均為支持的硬件。UseAES與UseAESIntrinsics一起使用。

      -XX:+ UseAESIntrinsics

      默認(rèn)情況下啟用UseAES和UseAESIntrinsics標(biāo)志,僅支持Java HotSpot Server VM 32位和64位。要禁用基于硬件的AES內(nèi)在函數(shù),請(qǐng)指定-XX:-UseAES -XX:-UseAESIntrinsics。例如,要啟用硬件AES,請(qǐng)使用以下標(biāo)志:

      -XX:+?UseAES?-XX:+?UseAESIntrinsics

      支持使用32位和64位的UseAES和UseAESIntrinsics標(biāo)志-server選項(xiàng)來選擇Java HotSpot Server VM。客戶端VM不支持這些標(biāo)志。

      -XX:+ UseCodeCacheFlushing

      在關(guān)閉編譯器之前啟用刷新代碼緩存。默認(rèn)情況下啟用此選項(xiàng)。要在關(guān)閉編譯器之前禁用刷新代碼緩存,請(qǐng)指定-XX:-UseCodeCacheFlushing。

      -XX:+ UseCondCardMark

      在更新卡表之前,可以檢查卡是否已經(jīng)標(biāo)記。默認(rèn)情況下禁用此選項(xiàng),并且只應(yīng)在具有多個(gè)套接字的計(jì)算機(jī)上使用此選項(xiàng),從而提高嚴(yán)重依賴并發(fā)操作的Java應(yīng)用程序的性能。只有Java HotSpot Server VM支持此選項(xiàng)。

      -XX:+ UseRTMDeopt

      根據(jù)中止率自動(dòng)調(diào)諧RTM鎖定。該比率由-XX:RTMAbortRatio選項(xiàng)指定。如果中止事務(wù)的數(shù)量超過中止率,則包含鎖定的方法將被取消優(yōu)化并重新編譯,并將所有鎖定為正常鎖定。默認(rèn)情況下禁用此選項(xiàng)。-XX:+UseRTMLocking必須啟用該選項(xiàng)。

      -XX:+ UseRTMLocking

      為所有膨脹的鎖生成受限制的事務(wù)性內(nèi)存(RTM)鎖定代碼,使用正常的鎖定機(jī)制作為回退處理程序。默認(rèn)情況下禁用此選項(xiàng)。與RTM相關(guān)的選項(xiàng)僅適用于支持事務(wù)同步擴(kuò)展(TSX)的x86 CPU上的Java HotSpot Server VM。

      RTM是英特爾TSX的一部分,它是x86指令集擴(kuò)展,有助于創(chuàng)建多線程應(yīng)用程序。RTM引入了新的指示XBEGIN,XABORT,XEND,和XTEST。該XBEGIN和XEND說明附上一組指令作為一個(gè)事務(wù)中運(yùn)行。如果在運(yùn)行事務(wù)時(shí)未發(fā)現(xiàn)沖突,則內(nèi)存和寄存器修改將在XEND指令處一起提交。該XABORT指令可用于顯式中止事務(wù)以及XEND檢查是否在事務(wù)中運(yùn)行一組指令的指令。

      當(dāng)另一個(gè)線程嘗試訪問同一事務(wù)時(shí),對(duì)事務(wù)的鎖定會(huì)膨脹,從而阻止最初未請(qǐng)求訪問該事務(wù)的線程。RTM要求在事務(wù)中止或失敗時(shí)指定后備操作集。RTM鎖是一種委托給TSX系統(tǒng)的鎖。

      RTM提高了在關(guān)鍵區(qū)域中具有低沖突的高競(jìng)爭(zhēng)鎖的性能(這是不能同時(shí)由多個(gè)線程訪問的代碼)。RTM還提高了粗粒度鎖定的性能,這在多線程應(yīng)用程序中通常表現(xiàn)不佳。(粗粒度鎖定是長(zhǎng)時(shí)間保持鎖定以最小化獲取和釋放鎖定的開銷的策略,而細(xì)粒度鎖定是通過僅在必要時(shí)鎖定并盡快解鎖來嘗試實(shí)現(xiàn)最大并行性的策略。此外,對(duì)于不同線程使用的輕度爭(zhēng)用鎖,RTM可以減少錯(cuò)誤的緩存行共享,也稱為緩存行乒乓。當(dāng)來自不同處理器的多個(gè)線程訪問不同的資源時(shí)會(huì)發(fā)生?但資源共享相同的緩存行。結(jié)果,處理器重復(fù)地使其他處理器的高速緩存行無效,這迫使它們從主存儲(chǔ)器而不是它們的高速緩存讀取。

      -XX:+ UseSHA

      為SPARC硬件啟用SHA加密散列函數(shù)的基于硬件的內(nèi)在函數(shù)。UseSHA與結(jié)合使用UseSHA1Intrinsics,UseSHA256Intrinsics和UseSHA512Intrinsics選項(xiàng)。

      在UseSHA和UseSHA*Intrinsics標(biāo)志默認(rèn)情況下啟用,并且僅適用于SPARC T4和新的Java HotSpot的服務(wù)器虛擬機(jī)的64位支持。

      此功能僅在使用sun.security.provider.SunSHA操作的提供程序時(shí)適用。

      要禁用所有基于硬件的SHA內(nèi)在函數(shù),請(qǐng)指定-XX:-UseSHA。要僅禁用特定的SHA內(nèi)在函數(shù),請(qǐng)使用相應(yīng)的相應(yīng)選項(xiàng)。例如:-XX:-UseSHA256Intrinsics。

      -XX:+ UseSHA1Intrinsics

      為SHA-1加密哈希函數(shù)啟用內(nèi)在函數(shù)。

      -XX:+ UseSHA256Intrinsics

      為SHA-224和SHA-256加密哈希函數(shù)啟用內(nèi)在函數(shù)。

      -XX:+ UseSHA512Intrinsics

      為SHA-384和SHA-512加密散列函數(shù)啟用內(nèi)在函數(shù)。

      -XX:+ UseSuperWord

      允許將標(biāo)量操作轉(zhuǎn)換為超級(jí)字操作。默認(rèn)情況下啟用此選項(xiàng)。要禁用將標(biāo)量操作轉(zhuǎn)換為超級(jí)字操作,請(qǐng)指定-XX:-UseSuperWord。只有Java HotSpot Server VM支持此選項(xiàng)。

      高級(jí)可維護(hù)性選項(xiàng)

      這些選項(xiàng)提供了收集系統(tǒng)信息和執(zhí)行大量調(diào)試的功能。

      -XX:+ ExtendedDTraceProbes

      啟用dtrace影響性能的其他工具探測(cè)。默認(rèn)情況下,此選項(xiàng)已禁用,dtrace僅執(zhí)行標(biāo)準(zhǔn)探測(cè)。

      -XX:+ HeapDumpOnOutOfMemoryError

      在java.lang.OutOfMemoryError拋出異常時(shí),通過使用堆分析器(HPROF)將Java堆轉(zhuǎn)儲(chǔ)到當(dāng)前目錄中的文件。您可以使用該-XX:HeapDumpPath選項(xiàng)顯式設(shè)置堆轉(zhuǎn)儲(chǔ)文件路徑和名稱。默認(rèn)情況下,禁用此選項(xiàng),并在OutOfMemoryError拋出異常時(shí)不轉(zhuǎn)儲(chǔ)堆。

      -XX:HeapDumpPath =?path

      設(shè)置-XX:+HeapDumpOnOutOfMemoryError選項(xiàng)設(shè)置時(shí),設(shè)置用于寫入堆分析器(HPROF)提供的堆轉(zhuǎn)儲(chǔ)的路徑和文件名。默認(rèn)情況下,該文件在當(dāng)前工作目錄中創(chuàng)建,并且名為java_pidpid.hprof,其中pid是導(dǎo)致錯(cuò)誤的進(jìn)程的標(biāo)識(shí)符。以下示例顯示如何顯式設(shè)置默認(rèn)文件(%p表示當(dāng)前進(jìn)程標(biāo)識(shí)符):

      -XX:HeapDumpPath?=?/?java_pid%p.hprof

      以下示例顯示如何將堆轉(zhuǎn)儲(chǔ)文件設(shè)置為/var/log/java/java_heapdump.hprof:

      -XX:HeapDumpPath?=?/無功/日志/?JAVA?/?java_heapdump.hprof

      -XX:LogFile =?path

      設(shè)置寫入日志數(shù)據(jù)的路徑和文件名。默認(rèn)情況下,該文件在當(dāng)前工作目錄中創(chuàng)建,并以其命名hotspot.log。

      以下示例顯示如何將日志文件設(shè)置為/var/log/java/hotspot.log:

      -XX:日志文件=?/無功/日志/?JAVA?/?hotspot.log

      -XX:+ PrintClassHistogram

      在Control+C事件(SIGTERM)之后啟用類實(shí)例直方圖的打印。默認(rèn)情況下,禁用此選項(xiàng)。

      設(shè)置此選項(xiàng)等同于運(yùn)行jmap -histo命令或jcmd?pid?GC.class_histogram命令,其中pid是當(dāng)前Java進(jìn)程標(biāo)識(shí)符。

      -XX:+ PrintConcurrentLocks

      java.util.concurrent在Control+C事件(SIGTERM)之后啟用鎖的打印。默認(rèn)情況下,禁用此選項(xiàng)。

      設(shè)置此選項(xiàng)等同于運(yùn)行jstack -l命令或jcmd?pid?Thread.print -l命令,其中pid是當(dāng)前Java進(jìn)程標(biāo)識(shí)符。

      -XX:+ UnlockDiagnosticVMOptions

      解鎖用于診斷JVM的選項(xiàng)。默認(rèn)情況下,此選項(xiàng)已禁用,診斷選項(xiàng)不可用。

      高級(jí)垃圾收集選項(xiàng)

      這些選項(xiàng)控制Java HotSpot VM如何執(zhí)行垃圾收集(GC)。

      -XX:+ AggressiveHeap

      啟用Java堆優(yōu)化。根據(jù)計(jì)算機(jī)的配置(RAM和CPU),這會(huì)將各種參數(shù)設(shè)置為具有密集內(nèi)存分配的長(zhǎng)時(shí)間運(yùn)行作業(yè)的最佳選擇。默認(rèn)情況下,禁用該選項(xiàng)并且不優(yōu)化堆。

      -XX:+ AlwaysPreTouch

      在JVM初始化期間允許觸摸Java堆上的每個(gè)頁(yè)面。這會(huì)在進(jìn)入main()方法之前將所有頁(yè)面放入內(nèi)存中。該選項(xiàng)可用于測(cè)試以模擬長(zhǎng)時(shí)間運(yùn)行的系統(tǒng),其中所有虛擬內(nèi)存都映射到物理內(nèi)存。默認(rèn)情況下,禁用此選項(xiàng),并將所有頁(yè)面作為JVM堆空間填充提交。

      -XX:+ CMSClassUnloadingEnabled

      使用并發(fā)標(biāo)記清除(CMS)垃圾收集器時(shí)啟用類卸載。默認(rèn)情況下啟用此選項(xiàng)。要禁用CMS垃圾收集器的類卸載,請(qǐng)指定-XX:-CMSClassUnloadingEnabled。

      -XX:CMSExpAvgFactor =?百分比

      設(shè)置在計(jì)算并發(fā)收集統(tǒng)計(jì)信息的指數(shù)平均值時(shí)用于加權(quán)當(dāng)前樣本的時(shí)間百分比(0到100)。默認(rèn)情況下,指數(shù)平均值因子設(shè)置為25%。以下示例顯示如何將因子設(shè)置為15%:

      -XX:CMSExpAvgFactor?=?15

      -XX:CMSInitiatingOccupancyFraction =?百分比

      設(shè)置啟動(dòng)CMS收集周期的舊代占用率(0到100)的百分比。默認(rèn)值設(shè)置為-1。任何負(fù)值(包括默認(rèn)值)都意味著-XX:CMSTriggerRatio用于定義初始占用率的值。

      以下示例顯示如何將占用率設(shè)置為20%:

      -XX:CMSInitiatingOccupancyFraction?=?20

      -XX:+ CMSScavengeBeforeRemark

      在CMS備注步驟之前啟用清理嘗試。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:CMSTriggerRatio =?百分比

      設(shè)置在-XX:MinHeapFreeRatioCMS收集周期開始之前分配的值所指定的值的百分比(0到100)。默認(rèn)值設(shè)置為80%。

      以下示例顯示如何將占用率設(shè)置為75%:

      -XX:CMSTriggerRatio?=?75

      -XX:ConcGCThreads =?threads

      設(shè)置用于并發(fā)GC的線程數(shù)。默認(rèn)值取決于JVM可用的CPU數(shù)。

      例如,要將并發(fā)GC的線程數(shù)設(shè)置為2,請(qǐng)指定以下選項(xiàng):

      -XX:ConcGCThreads?=?2

      -XX:+ DisableExplicitGC

      啟用禁用處理呼叫的選項(xiàng)System.gc()。默認(rèn)情況下禁用此選項(xiàng),這意味著System.gc()將處理調(diào)用。如果System.gc()禁用了對(duì)調(diào)用的處理,則JVM在必要時(shí)仍會(huì)執(zhí)行GC。

      -XX:+ ExplicitGCInvokesConcurrent

      允許使用System.gc()請(qǐng)求調(diào)用并發(fā)GC?。默認(rèn)情況下禁用此選項(xiàng),并且只能與該-XX:+UseConcMarkSweepGC選項(xiàng)一起啟用。

      -XX:+ ExplicitGCInvokesConcurrentAndUnloadsClasses

      通過System.gc()在并發(fā)GC周期期間使用請(qǐng)求和卸載類,可以調(diào)用并發(fā)GC。默認(rèn)情況下禁用此選項(xiàng),并且只能與該-XX:+UseConcMarkSweepGC選項(xiàng)一起啟用。

      -XX:G1HeapRegionSize =?size

      設(shè)置使用垃圾優(yōu)先(G1)收集器時(shí)Java堆所細(xì)分的區(qū)域的大小。該值可以介于1 MB和32 MB之間。默認(rèn)區(qū)域大小根據(jù)堆大小以符合人體工程學(xué)的方式確定。

      以下示例顯示如何將細(xì)分的大小設(shè)置為16 MB:

      -XX:G1HeapRegionSize?=16米

      -XX:+ G1PrintHeapRegions

      允許打印有關(guān)哪些區(qū)域已分配以及哪些區(qū)域由G1收集器回收的信息。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:G1ReservePercent =?百分比

      設(shè)置保留為false上限的堆的百分比(0到50),以減少G1收集器升級(jí)失敗的可能性。默認(rèn)情況下,此選項(xiàng)設(shè)置為10%。

      以下示例顯示如何將保留堆設(shè)置為20%:

      -XX:G1ReservePercent?=?20

      -XX:InitialHeapSize =?size

      設(shè)置內(nèi)存分配池的初始大小(以字節(jié)為單位)。該值必須為0或1024的倍數(shù)且大于1 MB。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。根據(jù)系統(tǒng)配置在運(yùn)行時(shí)選擇默認(rèn)值。請(qǐng)參閱Java SE HotSpot虛擬機(jī)垃圾收集調(diào)整指南中的“人體工程學(xué)”部分http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html。

      以下示例顯示如何使用各種單位將分配的內(nèi)存大小設(shè)置為6 MB:

      -XX:InitialHeapSize?=?6291456? -XX:InitialHeapSize?=?6144k? -XX:InitialHeapSize?=?6m

      如果將此選項(xiàng)設(shè)置為0,則初始大小將設(shè)置為為舊代和年輕代分配的大小的總和。可以使用-XX:NewSize選項(xiàng)設(shè)置年輕代的堆大小。

      -XX:InitialSurvivorRatio =?ratio

      設(shè)置吞吐量垃圾收集器使用的初始幸存者空間比率(由-XX:+UseParallelGC和/或 -?XX:+UseParallelOldGC選項(xiàng)啟用)。通過使用-XX:+UseParallelGC和-XX:+UseParallelOldGC選項(xiàng),默認(rèn)情況下使用吞吐量垃圾收集器啟用自適應(yīng)調(diào)整,并根據(jù)應(yīng)用程序行為調(diào)整幸存者空間,從初始值開始。如果禁用自適應(yīng)大小調(diào)整(使用該-XX:-UseAdaptiveSizePolicy選項(xiàng)),-XX:SurvivorRatio則應(yīng)使用該選項(xiàng)為整個(gè)應(yīng)用程序執(zhí)行設(shè)置幸存者空間的大小。

      以下公式可用于根據(jù)年輕一代的大小(Y)和初始幸存者空間比率(R)計(jì)算幸存者空間(S)的初始大小:

      S?=?Y?/(R?+?2)

      等式中的2表示兩個(gè)幸存者空間。指定為初始幸存者空間比的值越大,初始幸存者空間大小越小。

      默認(rèn)情況下,初始幸存者空間比率設(shè)置為8.如果使用年輕代空間大小的默認(rèn)值(2 MB),則幸存者空間的初始大小將為0.2 MB。

      以下示例顯示如何將初始幸存者空間比率設(shè)置為4:

      -XX:InitialSurvivorRatio?=?4

      -XX:InitiatingHeapOccupancyPercent =?百分比

      設(shè)置啟動(dòng)并發(fā)GC循環(huán)的堆占用百分比(0到100)。它由垃圾收集器使用,它根據(jù)整個(gè)堆的占用而觸發(fā)并發(fā)GC循環(huán),而不僅僅是其中一代(例如,G1垃圾收集器)。

      默認(rèn)情況下,初始值設(shè)置為45%。值0表示不間斷的GC循環(huán)。以下示例顯示如何將啟動(dòng)堆占用率設(shè)置為75%:

      -XX:InitiatingHeapOccupancyPercent?=?75

      -XX:MaxGCPauseMillis =?時(shí)間

      設(shè)置最大GC暫停時(shí)間的目標(biāo)(以毫秒為單位)。這是一個(gè)軟目標(biāo),JVM將盡最大努力實(shí)現(xiàn)它。默認(rèn)情況下,沒有最大暫停時(shí)間值。

      以下示例顯示如何將最大目標(biāo)暫停時(shí)間設(shè)置為500毫秒:

      -XX:MaxGCPauseMillis?=?500

      -XX:MaxHeapSize =?size

      設(shè)置內(nèi)存分配池的最大大小(以字節(jié)為單位)。該值必須是1024的倍數(shù)且大于2 MB。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。根據(jù)系統(tǒng)配置在運(yùn)行時(shí)選擇默認(rèn)值。對(duì)于服務(wù)器部署,-XX:InitialHeapSize并-XX:MaxHeapSize經(jīng)常設(shè)置為相同的值。請(qǐng)參閱Java SE HotSpot虛擬機(jī)垃圾收集調(diào)整指南中的“人體工程學(xué)”部分http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html。

      以下示例顯示如何使用各種單位將分配的內(nèi)存的最大允許大小設(shè)置為80 MB:

      -XX:MaxHeapSize?=?83886080? -XX:MaxHeapSize?=?81920k? -XX:MaxHeapSize?=?80m

      在Oracle Solaris 7和Oracle Solaris 8 SPARC平臺(tái)上,此值的上限約為4,000 MB減去間接費(fèi)用金額。在Oracle Solaris 2.6和x86平臺(tái)上,上限約為2,000 MB減去間接費(fèi)用金額。在Linux平臺(tái)上,上限約為2,000 MB減去間接費(fèi)用金額。

      該-XX:MaxHeapSize選項(xiàng)相當(dāng)于-Xmx。

      -XX:MaxHeapFreeRatio =?百分比

      設(shè)置GC事件后允許的最大空閑堆空間百分比(0到100)。如果可用堆空間擴(kuò)展到此值以上,則堆將縮小。默認(rèn)情況下,此值設(shè)置為70%。

      以下示例顯示如何將最大可用堆比率設(shè)置為75%:

      -XX:MaxHeapFreeRatio?=?75

      -XX:MaxMetaspaceSize =?size

      設(shè)置可以為類元數(shù)據(jù)分配的最大本機(jī)內(nèi)存量。默認(rèn)情況下,大小不受限制。應(yīng)用程序的元數(shù)據(jù)量取決于應(yīng)用程序本身,其他正在運(yùn)行的應(yīng)用程序以及系統(tǒng)上可用的內(nèi)存量。

      以下示例顯示如何將最大類元數(shù)據(jù)大小設(shè)置為256 MB:

      -XX:MaxMetaspaceSize?=256米

      -XX:MaxNewSize =?size

      設(shè)置年輕代(托兒所)的堆的最大大小(以字節(jié)為單位)。默認(rèn)值按人體工程學(xué)設(shè)置。

      -XX:MaxTenuringThreshold =?threshold

      設(shè)置自適應(yīng)GC大小調(diào)整中使用的最大暫定閾值。最大值為15.并行(吞吐量)收集器的默認(rèn)值為15,CMS收集器的默認(rèn)值為6。

      以下示例顯示如何將最大期限閾值設(shè)置為10:

      -XX:MaxTenuringThreshold?=?10

      -XX:MetaspaceSize =?size

      設(shè)置分配的類元數(shù)據(jù)空間的大小,該空間將在第一次超出時(shí)觸發(fā)垃圾回收。根據(jù)使用的元數(shù)據(jù)量,增加或減少垃圾收集的閾值。默認(rèn)大小取決于平臺(tái)。

      -XX:MinHeapFreeRatio =?百分比

      設(shè)置GC事件后允許的最小空閑堆空間百分比(0到100)。如果可用堆空間低于此值,則將擴(kuò)展堆。默認(rèn)情況下,此值設(shè)置為40%。

      以下示例顯示如何將最小可用堆比率設(shè)置為25%:

      -XX:MinHeapFreeRatio?=?25

      -XX:NewRatio =?ratio

      設(shè)置年輕和老一代尺寸之間的比率。默認(rèn)情況下,此選項(xiàng)設(shè)置為2.以下示例顯示如何將年輕/舊比率設(shè)置為1:

      -XX:NewRatio?=?1

      -XX:NewSize =?size

      設(shè)置年輕代(托兒所)的堆的初始大小(以字節(jié)為單位)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。

      堆的年輕代區(qū)域用于新對(duì)象。GC在該區(qū)域比在其他區(qū)域更頻繁地進(jìn)行。如果年輕一代的規(guī)模太小,那么將會(huì)執(zhí)行大量的小型GC。如果尺寸太大,則只會(huì)執(zhí)行完整的GC,這可能需要很長(zhǎng)時(shí)間才能完成。Oracle建議您將年輕代的大小保持在整個(gè)堆大小的一半到四分之一之間。

      以下示例顯示如何使用各種單位將年輕代的初始大小設(shè)置為256 MB:

      JDK8部分JVM參數(shù)說明(二)

      -XX:NewSize?=?256m? -XX:NewSize?=?262144k? -XX:NewSize?=?268435456

      該-XX:NewSize選項(xiàng)相當(dāng)于-Xmn。

      -XX:ParallelGCThreads =?threads

      設(shè)置用于年輕和老年代的并行垃圾收集的線程數(shù)。默認(rèn)值取決于JVM可用的CPU數(shù)。

      例如,要將并行GC的線程數(shù)設(shè)置為2,請(qǐng)指定以下選項(xiàng):

      -XX:ParallelGCThreads?=?2

      -XX:+ ParallelRefProcEnabled

      啟用并行參考處理。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ PrintAdaptiveSizePolicy

      允許打印有關(guān)自適應(yīng)生成大小的信息。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ PrintGC

      允許在每個(gè)GC上打印消息。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ PrintGCApplicationConcurrentTime

      允許打印自上次暫停后經(jīng)過的時(shí)間(例如,GC暫停)。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ PrintGCApplicationStoppedTime

      允許打印暫停(例如,GC暫停)持續(xù)多長(zhǎng)時(shí)間。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ PrintGCDateStamps

      允許在每個(gè)GC上打印日期戳。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ PrintGCDetails

      允許在每個(gè)GC上打印詳細(xì)消息。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ PrintGCTaskTimeStamps

      允許為每個(gè)GC工作線程任務(wù)打印時(shí)間戳。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ PrintGCTimeStamps

      允許在每個(gè)GC上打印時(shí)間戳。默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ PrintStringDeduplicationStatistics

      打印詳細(xì)的重復(fù)數(shù)據(jù)刪除統(tǒng)計(jì)信息。默認(rèn)情況下,禁用此選項(xiàng)。請(qǐng)參閱-XX:+UseStringDeduplication選項(xiàng)。

      -XX:+ PrintTenuringDistribution

      允許打印終身年齡信息。以下是輸出的示例:

      期望的幸存者大小48286924字節(jié),新閾值10(最大10) -?年齡1:28992024字節(jié),28992024總計(jì) -?年齡2:1366864字節(jié),30358888總計(jì) -?年齡3:1425912字節(jié),31784800總計(jì) ...

      1歲對(duì)象是最年輕的幸存者(它們是在之前的清除之后創(chuàng)建的,在最近的清除中幸存下來,并從伊甸園遷移到幸存者空間)。2歲的物體在兩次清除中幸存下來(在第二次清除期間,它們被從一個(gè)幸存者空間復(fù)制到下一個(gè)幸存者空間)。等等。

      在前面的示例中,28 992 024個(gè)字節(jié)在一次清除中幸存,并從eden復(fù)制到幸存者空間,1 366 864個(gè)字節(jié)由2歲對(duì)象占用,等等。每行中的第三個(gè)值是年齡n的對(duì)象的累積大小或減。

      默認(rèn)情況下,禁用此選項(xiàng)。

      -XX:+ ScavengeBeforeFullGC

      在每個(gè)完整GC之前啟用年輕代的GC。默認(rèn)情況下啟用此選項(xiàng)。Oracle建議您不要禁用它,因?yàn)樵谕暾鸊C之前清除年輕代可以減少?gòu)呐f代空間到年輕代空間可到達(dá)的對(duì)象數(shù)。要在每個(gè)完整GC之前禁用年輕代的GC,請(qǐng)指定-XX:-ScavengeBeforeFullGC。

      -XX:SoftRefLRUPolicyMSPerMB =?時(shí)間

      設(shè)置軟件可訪問對(duì)象在上次引用后在堆上保持活動(dòng)狀態(tài)的時(shí)間(以毫秒為單位)。默認(rèn)值是堆中每個(gè)可用兆字節(jié)的生存期的一秒。該-XX:SoftRefLRUPolicyMSPerMB選項(xiàng)接受整數(shù)值,表示每兆字節(jié)當(dāng)前堆大小(對(duì)于Java HotSpot客戶端VM)的毫秒數(shù)或最大可能堆大小(對(duì)于Java HotSpot Server VM)。這種差異意味著客戶端VM傾向于刷新軟引用而不是增加堆,而服務(wù)器VM傾向于增加堆而不是刷新軟引用。在后一種情況下,-Xmx選項(xiàng)的值對(duì)軟引用的垃圾收集速度有顯著影響。

      以下示例顯示如何將值設(shè)置為2.5秒:

      -XX:SoftRefLRUPolicyMSPerMB?=?2500

      -XX:StringDeduplicationAgeThreshold =?threshold

      String達(dá)到指定年齡的對(duì)象被視為重復(fù)數(shù)據(jù)刪除的候選對(duì)象。對(duì)象的年齡是對(duì)垃圾收集存活多少次的度量。這有時(shí)被稱為終身;?看到-XX:+PrintTenuringDistribution選項(xiàng)。請(qǐng)注意,String在達(dá)到此年齡之前提升到舊堆區(qū)域的對(duì)象始終被視為重復(fù)數(shù)據(jù)刪除的候選對(duì)象。此選項(xiàng)的默認(rèn)值為3。請(qǐng)參閱-XX:+UseStringDeduplication選項(xiàng)。

      -XX:SurvivorRatio =?比率

      設(shè)置伊甸園空間大小與幸存者空間大小之間的比率。默認(rèn)情況下,此選項(xiàng)設(shè)置為8.以下示例顯示如何將eden / survivor空間比率設(shè)置為4:

      -XX:SurvivorRatio?=?4

      -XX:TargetSurvivorRatio =?百分比

      設(shè)置年輕垃圾收集后使用的幸存者空間(0到100)的所需百分比。默認(rèn)情況下,此選項(xiàng)設(shè)置為50%。

      以下示例顯示如何將目標(biāo)幸存者空間比率設(shè)置為30%:

      -XX:TargetSurvivorRatio?=?30

      -XX:TLABSize =?size

      設(shè)置線程局部分配緩沖區(qū)(TLAB)的初始大小(以字節(jié)為單位)。附加字母k或K表示千字節(jié),m或M指示兆字節(jié),g或G指示千兆字節(jié)。如果此選項(xiàng)設(shè)置為0,則JVM會(huì)自動(dòng)選擇初始大小。

      以下示例顯示如何將初始TLAB大小設(shè)置為512 KB:

      -XX:TLABSize?=?512K

      -XX:+ UseAdaptiveSizePolicy

      允許使用自適應(yīng)生成大小。默認(rèn)情況下啟用此選項(xiàng)。要禁用自適應(yīng)生成大小調(diào)整,請(qǐng)明確指定-XX:-UseAdaptiveSizePolicy和設(shè)置內(nèi)存分配池的大小(請(qǐng)參閱-XX:SurvivorRatio選項(xiàng))。

      -XX:+ UseCMSInitiatingOccupancyOnly

      允許使用占用值作為啟動(dòng)CMS收集器的唯一標(biāo)準(zhǔn)。默認(rèn)情況下,此選項(xiàng)已禁用,可能會(huì)使用其他條件。

      -XX:+ UseConcMarkSweepGC

      允許為舊一代使用CMS垃圾收集器。Oracle建議您在spam(-XX:+UseParallelGC)垃圾收集器無法滿足應(yīng)用程序延遲要求時(shí)使用CMS垃圾收集器。G1垃圾收集器(-XX:+UseG1GC)是另一種選擇。

      默認(rèn)情況下,禁用此選項(xiàng),并根據(jù)計(jì)算機(jī)的配置和JVM的類型自動(dòng)選擇收集器。啟用此選項(xiàng)后,將-XX:+UseParNewGC自動(dòng)設(shè)置該選項(xiàng),您不應(yīng)禁用該選項(xiàng),因?yàn)镴DK 8中已棄用以下選項(xiàng)組合:-XX:+UseConcMarkSweepGC -XX:-UseParNewGC。

      -XX:+ UseG1GC

      允許使用垃圾優(yōu)先(G1)垃圾收集器。它是一個(gè)服務(wù)器式垃圾收集器,針對(duì)具有大量RAM的多處理器機(jī)器。它以高概率滿足GC暫停時(shí)間目標(biāo),同時(shí)保持良好的吞吐量。G1收集器推薦用于需要大堆(大小約為6 GB或更大)且GC延遲要求有限的應(yīng)用(穩(wěn)定且可預(yù)測(cè)的暫停時(shí)間低于0.5秒)。

      默認(rèn)情況下,禁用此選項(xiàng),并根據(jù)計(jì)算機(jī)的配置和JVM的類型自動(dòng)選擇收集器。

      -XX:+ UseGCOverheadLimit

      允許使用策略來限制在OutOfMemoryError引發(fā)異常之前JVM在GC上花費(fèi)的時(shí)間比例。默認(rèn)情況下,此選項(xiàng)處于啟用狀態(tài),OutOfMemoryError如果將超過98%的總時(shí)間花在垃圾回收上并且回收的堆少于2%,則并行GC將拋出該選項(xiàng)。當(dāng)堆很小時(shí),此功能可用于防止應(yīng)用程序長(zhǎng)時(shí)間運(yùn)行,幾乎沒有進(jìn)展。要禁用此選項(xiàng),請(qǐng)指定-XX:-UseGCOverheadLimit。

      -XX:+ UseNUMA

      通過增加應(yīng)用程序?qū)Φ脱舆t內(nèi)存的使用,在具有非均勻內(nèi)存架構(gòu)(NUMA)的計(jì)算機(jī)上實(shí)現(xiàn)應(yīng)用程序的性能優(yōu)化。默認(rèn)情況下,此選項(xiàng)被禁用,并且不會(huì)對(duì)NUMA進(jìn)行優(yōu)化。該選項(xiàng)僅在使用并行垃圾收集器時(shí)可用(-XX:+UseParallelGC)。

      -XX:+ UseParallelGC

      允許使用并行清除垃圾收集器(也稱為吞吐量收集器),通過利用多個(gè)處理器來提高應(yīng)用程序的性能。

      默認(rèn)情況下,禁用此選項(xiàng),并根據(jù)計(jì)算機(jī)的配置和JVM的類型自動(dòng)選擇收集器。如果已啟用,則會(huì)-XX:+UseParallelOldGC自動(dòng)啟用該選項(xiàng),除非您明確禁用它。

      -XX:+ UseParallelOldGC

      允許將并行垃圾收集器用于完整的GC。默認(rèn)情況下,禁用此選項(xiàng)。啟用它會(huì)自動(dòng)啟用該-XX:+UseParallelGC選項(xiàng)。

      -XX:+ UseParNewGC

      允許在年輕一代中使用并行線程進(jìn)行收集。默認(rèn)情況下,禁用此選項(xiàng)。設(shè)置-XX:+UseConcMarkSweepGC選項(xiàng)時(shí)會(huì)自動(dòng)啟用它。使用-XX:+UseParNewGC不帶選項(xiàng)-XX:+UseConcMarkSweepGC的選擇是在JDK 8棄用。

      -XX:+ UseSerialGC

      允許使用串行垃圾收集器。對(duì)于不需要垃圾收集的任何特殊功能的小型和簡(jiǎn)單應(yīng)用程序,這通常是最佳選擇。默認(rèn)情況下,禁用此選項(xiàng),并根據(jù)計(jì)算機(jī)的配置和JVM的類型自動(dòng)選擇收集器。

      -XX:+ UseSHM

      在Linux上,使JVM能夠使用共享內(nèi)存來設(shè)置大頁(yè)面。

      有關(guān)更多信息,請(qǐng)參閱“大頁(yè)面”。

      -XX:+ UseStringDeduplication

      啟用字符串重復(fù)數(shù)據(jù)刪除。默認(rèn)情況下,禁用此選項(xiàng)。要使用此選項(xiàng),必須啟用垃圾優(yōu)先(G1)垃圾收集器。請(qǐng)參閱-XX:+UseG1GC選項(xiàng)。

      字符串重復(fù)數(shù)據(jù)刪除String通過利用許多String對(duì)象相同的事實(shí)來減少Java堆上對(duì)象的內(nèi)存占用。String相同的String對(duì)象可以指向并共享相同的字符數(shù)組,而不是每個(gè)對(duì)象指向其自己的字符數(shù)組。

      -XX:+ UseTLAB

      允許在年輕代空間中使用線程局部分配塊(TLAB)。默認(rèn)情況下啟用此選項(xiàng)。要禁用TLAB,請(qǐng)指定-XX:-UseTLAB。

      已棄用和已刪除的選項(xiàng)

      這些選項(xiàng)包含在之前的版本中,但后來被認(rèn)為是不必要的。

      -Xincgc

      啟用增量垃圾收集。此選項(xiàng)在JDK 8中已棄用,無需替換。

      -Xrun?libname

      加載指定的調(diào)試/分析庫(kù)。此選項(xiàng)已被該選項(xiàng)取代-agentlib。

      -XX:CMSIncrementalDutyCycle =?百分比

      設(shè)置允許并發(fā)收集器運(yùn)行的次要集合之間的時(shí)間百分比(0到100)。在棄用選項(xiàng)后,此選項(xiàng)在JDK 8中已棄用,沒有替換-XX:+CMSIncrementalMode。

      -XX:CMSIncrementalDutyCycleMin =?百分比

      設(shè)置次要集合之間的時(shí)間百分比(0到100),它-XX:+CMSIncrementalPacing是啟用時(shí)占空比的下限。在棄用選項(xiàng)后,此選項(xiàng)在JDK 8中已棄用,沒有替換-XX:+CMSIncrementalMode。

      -XX:+ CMSIncrementalMode

      啟用CMS收集器的增量模式。此選項(xiàng)在JDK 8中已棄用,沒有替換,以及其他選項(xiàng)CMSIncremental。

      -XX:CMSIncrementalOffset =?百分比

      設(shè)置增量模式占空比在次要集合之間的時(shí)間段內(nèi)向右移動(dòng)的時(shí)間百分比(0到100)。在棄用選項(xiàng)后,此選項(xiàng)在JDK 8中已棄用,沒有替換-XX:+CMSIncrementalMode。

      -XX:+ CMSIncrementalPacing

      根據(jù)JVM運(yùn)行時(shí)收集的統(tǒng)計(jì)信息,啟用增量模式占空比的自動(dòng)調(diào)整。在棄用選項(xiàng)后,此選項(xiàng)在JDK 8中已棄用,沒有替換-XX:+CMSIncrementalMode。

      -XX:CMSIncrementalSafetyFactor =?百分比

      設(shè)置計(jì)算占空比時(shí)用于添加保守性的時(shí)間百分比(0到100)。在棄用選項(xiàng)后,此選項(xiàng)在JDK 8中已棄用,沒有替換-XX:+CMSIncrementalMode。

      -XX:CMSInitiatingPermOccupancyFraction =?百分比

      設(shè)置啟動(dòng)GC的永久生成占用率(0到100)的百分比。此選項(xiàng)在JDK 8中已棄用,無需替換。

      -XX:MaxPermSize =?size

      設(shè)置最大永久生成空間大小(以字節(jié)為單位)。此選項(xiàng)在JDK 8中已棄用,并由該-XX:MaxMetaspaceSize選項(xiàng)取代。

      -XX:PermSize =?size

      設(shè)置分配給永久生成的空間(以字節(jié)為單位),如果超出則會(huì)觸發(fā)垃圾回收。此選項(xiàng)在JDK 8中已棄用,并被該-XX:MetaspaceSize選項(xiàng)取代。

      -XX:+ UseSplitVerifier

      允許拆分驗(yàn)證過程。默認(rèn)情況下,此選項(xiàng)在先前版本中已啟用,驗(yàn)證分為兩個(gè)階段:類型引用(由編譯器執(zhí)行)和類型檢查(由JVM運(yùn)行時(shí)執(zhí)行)。此選項(xiàng)在JDK 8中已棄用,現(xiàn)在默認(rèn)情況下會(huì)對(duì)驗(yàn)證進(jìn)行拆分,而無法將其禁用。

      -XX:+ UseStringCache

      啟用常用分配字符串的緩存。此選項(xiàng)已從JDK 8中刪除,無需替換。

      ====================================

      轉(zhuǎn)自fr:?https://www.cnblogs.com/syuf/p/10183683.html

      多謝。

      ====================================

      鯤鵬

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:深度學(xué)習(xí)框架(如:Pytorch、Tensorflow、Caffe...)
      下一篇:PyQt 布局:創(chuàng)建具有專業(yè)外觀的 GUI 應(yīng)用程序
      相關(guān)文章
      国产亚洲一区二区三区在线观看 | 亚洲视频在线观看不卡| 亚洲另类激情专区小说图片| 亚洲国产AV一区二区三区四区| 狠狠色香婷婷久久亚洲精品| 亚洲va成无码人在线观看| 亚洲最大视频网站| 亚洲明星合成图综合区在线| 亚洲综合激情视频| 亚洲人成影院在线高清| 亚洲人成在线播放| 亚洲一级特黄特黄的大片| 亚洲综合色7777情网站777| 亚洲一卡2卡三卡4卡无卡下载| 丁香婷婷亚洲六月综合色| 亚洲中文字幕精品久久| 亚洲狠狠婷婷综合久久| 苍井空亚洲精品AA片在线播放| 日本亚洲中午字幕乱码| 亚洲精品国产V片在线观看| 国产亚洲精品拍拍拍拍拍| 国产亚洲精品岁国产微拍精品| 亚洲爆乳无码一区二区三区| 亚洲国产精品久久久久久| 亚洲老熟女@TubeumTV| 亚洲二区在线视频| 亚洲永久网址在线观看| 国产精品亚洲片在线花蝴蝶| 亚洲精品视频免费观看| 亚洲中文字幕在线第六区| 亚洲国产精品国自产拍AV| 亚洲嫩模在线观看| 亚洲性69影院在线观看| 在线a亚洲老鸭窝天堂av高清| 亚洲AV无码专区在线观看成人 | 亚洲GV天堂无码男同在线观看 | 亚洲美女大bbbbbbbbb| 亚洲香蕉久久一区二区| 亚洲国产精品99久久久久久| 亚洲国产成人久久综合野外| 亚洲色偷拍另类无码专区|