JVM Advanced JIT Compiler Options
- 2020 年 2 月 25 日
- 筆記
JIT相關編譯選項 Advanced JIT Compiler Options -XX:+AggressiveOpts 最核心的應該是加快編譯,在JDK 6之後就默認啟用的,啟用一些諸如編譯優化、偏向鎖、並行化老年代收集策略。通常是不用管的,默認的優化策略,添加此參數的原因是為工程提供一個優化技術選擇的空間。 -XX:AllocateInstancePrefetchLines=lines 在實例分配指針之前設置要預取的行數。默認情況下,要預取的行數設置為1。- xx:AllocateInstancePrefetchLines = 1隻有Java HotSpot伺服器VM支援這個選項。
-XX:AllocatePrefetchDistance=size 設置對象分配的預取距離,每個Java執行緒都有自己的分配點。默認值隨JVM運行的平台而異。在這個距離(以位元組為單位),在最後一個分配對象的地址之外,以新對象的值寫入記憶體。 -XX:AllocatePrefetchInstr=instruction 將預取指令設置為在分配指針之前預取。只有Java HotSpot Server VM支援此選項。可能的值從0到3。值背後的實際指令取決於平台。默認情況下,預取指令設置為0:- xx:AllocatePrefetchInstr = 0 只有Java HotSpot伺服器VM支援這個選項。 -XX:AllocatePrefetchLines=lines 使用JIT編譯程式碼中生成的預取指令,在最後一個對象分配之後載入的快取行數。如果最後分配的對象是實例,默認值為1;如果是數組,默認值為3。 -XX:AllocatePrefetchStepSize=size 設置順序預取指令的步驟大小(以位元組為單位)。附加字母k或k表示千位元組,m或m表示兆位元組,g或g表示千兆位元組。默認情況下,步長設置為16位元組:- xx:AllocatePrefetchStepSize = 16,只有Java HotSpot伺服器VM支援這個選項。 -XX:AllocatePrefetchStyle=style 為預取指令生成程式碼樣式。 0 -無預取指令產生d, 1 -每次分配後執行預取指令, 2 -執行預取指令時,使用TLAB分配標記指針到gate。 -XX:+BackgroundCompilation 啟動後台默認編譯 -XX:CICompilerCount=threads 調整編譯執行緒的數目 -XX:CodeCacheMinimumFreeSpace=size 快取程式碼最小空記憶體,防止記憶體溢出 -XX:CompileCommand=command,method[,option(break、compileonly、dontinline、exclude、help、inline、log、option、print、quiet)] 該參數用於訂製編譯需求,比如過濾某個方法不做JIT編譯,若未指定方法描述符,則對全部同名方法執行命令操作 -XX:CompileCommandFile=filename 配合上述指令來使用,指定.hotspot_compiler文件為其他文件。 -XX:CompileOnly=methods 僅編譯項 -XX:CompileThreshold=invocations 編譯前方法調用/分支的數目【-client默認是1500】 -XX:+DoEscapeAnalysis 逃逸分析優化-棧上分配 -XX:InitialCodeCacheSize=size 設置初始程式碼快取的大小 -XX:+Inline 使方法內聯。默認情況下,這個選項可以提高性能。要禁用方法內聯,指定-XX:-Inline即可。 -XX:InlineSmallCode=size 當生成本地程式碼的大小小於給定的值時,內聯這個預編譯方法。 -XX:+LogCompilation 允許將編譯活動記錄到名為hotspot的文件中。登錄當前工作目錄。可以使用-XX:LogFile選項指定不同的日誌文件路徑和名稱。 默認情況下,禁用此選項,不記錄編譯活動。必須將-XX:+ logcompile選項與-XX: unlockdiagnostics vmoptions選項一起使用,該選項解除診斷JVM選項的鎖定。 您可以通過使用-XX:+ printcompile選項,在每次編譯方法時,通過向控制台列印的消息來啟用詳細診斷輸出。 -XX:MaxInlineSize=size 內聯一個方法的最大位元組碼大小 -XX:MaxNodeLimit=nodes 設置在單個方法編譯期間要使用的最大節點數。 -XX:MaxTrivialSize=size 設置要內聯的小方法的最大位元組碼大小(以位元組為單位)。附加字母k或k表示千位元組,m或m表示兆位元組,g或g表示千兆位元組。 -XX:+OptimizeStringConcat 可能的話優化字元串連接操作(從Java6引入) -XX:+PrintAssembly 允許使用外部反彙編程式列印位元組碼和本機方法的彙編程式碼。所以圖書館。這使您能夠看到生成的程式碼,這可以幫助您診斷性能問題。 -XX:+PrintCompilation 當方法被編譯時列印消息 -XX:+PrintInlining 允許列印內部資訊。能夠看到哪些方法是內聯的。 -XX:ReservedCodeCacheSize=size 保留的程式碼快取大小-最大的程式碼快取大小 -XX:RTMAbortRatio=abort_ratio RTM中止比率被指定為所有已執行的RTM事務的百分比(%)。如果許多中止的事務超過這個比率,那麼編譯後的程式碼將被取消優化。在啟用-XX:+UseRTMDeoptoption時使用此比率。這個選項的默認值是50。這意味著,如果50%的事務被中止,編譯後的程式碼將被反優化。 -XX:RTMRetryCount=number_of_retries RTM鎖定程式碼將被重新嘗試,當它被中止或繁忙時,在回到正常鎖定機制之前,該選項指定的次數。此選項的默認值為5。必須啟用-XX: usertmlocked選項。 -XX:-TieredCompilation 禁止使用分層編譯。默認情況下,這個選項是啟用的。只有Java HotSpot伺服器VM支援這個選項。 -XX:+UseAES 為Intel、AMD和SPARC硬體提供基於硬體的AES特性。Intel Westmere(2010和更新的),AMD推土機(2011和更新的)和SPARC (T4和更新的)是支援的硬體。UseAES與useaesintrinsic一起使用。 -XX:+UseAESIntrinsics UseAES和useaesentisics標誌是默認啟用的,只支援Java HotSpot Server VM 32位和64位。要禁用基於硬體的AES intrinsic,請指定-XX:-UseAES -XX:- useaesintrinsic。例如,要啟用硬體AES,請使用以下:
- xx:+使用- xx:+ UseAESIntrinsics 為了支援UseAES和useaesendsics標誌,32位和64位使用-伺服器選項選擇Java HotSpot Server VM。客戶端VM不支援這些。 -XX:+UseCodeCacheFlushing 開啟了TiredCompilation, 會導致佔用CodeCache增大,如果超出CodeCache的size限制,會觸發:
- 停止新Jit,直到有空間;
- 啟動CodeCache清理, 釋放空間, 一定條件下會導致JIT被關閉 -XX:+UseCondCardMark 此選項在默認情況下是禁用的,應該只在具有多個套接字的機器上使用,這將提高嚴重依賴並發操作的Java應用程式的性能。只有Java HotSpot伺服器VM支援這個選項。 -XX:+UseRTMDeopt 根據中止比率自動調優RTM鎖定。此比率由-XX:RTMAbortRatio選項指定。如果中止事務的數量超過了abort比率,那麼包含鎖的方法將被優化並以所有鎖作為正常鎖重新編譯。默認情況下禁用此選項。必須啟用-XX:+ usertmlocked選項。 -XX:+UseRTMLocking 為所有膨脹的鎖生成受限制的事務記憶體(RTM)鎖定程式碼,使用常規的鎖定機製作為回退處理程式。默認情況下禁用此選項。與RTM相關的選項僅適用於支援事務同步擴展(TSX)的x86 cpu上的Java HotSpot伺服器VM。 RTM是Intel的TSX的一部分,TSX是一個x86指令集擴展,有助於創建多執行緒應用程式。RTM引入了新的指令XBEGIN、XABORT、XEND和XTEST。XBEGIN和XEND指令包含一組作為事務運行的指令。如果在運行事務時沒有發現衝突,則在XEND指令中一起提交記憶體和暫存器修改。可以使用XABORT指令顯式地中止事務,並使用theXEND指令檢查事務中是否正在運行一組指令。 當另一個執行緒試圖訪問相同的事務時,對事務的鎖被誇大,從而阻塞原本沒有請求訪問事務的執行緒。RTM要求在事務中止或失敗時指定一個備用操作集。RTM鎖是已經委託給TSX系統的鎖。 RTM提高了在關鍵區域(即不能同時被多個執行緒訪問的程式碼)中具有低衝突的高爭用鎖的性能。RTM還提高了粗粒度鎖的性能,這種鎖在多執行緒應用程式中通常表現不佳。(粗粒度鎖是長時間持有鎖的策略,以最小化獲取和釋放鎖的開銷,而細粒度鎖則是僅在必要時鎖定和儘快解鎖,以實現最大的並行性的策略。)另外,對於由不同執行緒使用的輕度爭用鎖,RTM可以減少錯誤的快取線共享,也稱為快取線ping-pong鍵。當來自不同處理器的多個執行緒訪問不同的資源,但是資源共享相同的快取行時,就會發生這種情況。因此,處理器重複地使其他處理器的快取線路無效,這迫使它們從主記憶體中讀取,而不是從快取中讀取。 -XX:+UseSHA、-XX:+UseSHA1Intrinsics、-XX:+UseSHA256Intrinsics、-XX:+UseSHA512Intrinsics -XX:+UseSuperWord 允許將標量操作轉換為SuperWord操作。此選項默認啟用。要禁用轉換為SuperWord操作,指定-XX:-UseSuperWord即可。只有Java HotSpot伺服器VM支援這個選項。