1. 程式人生 > 其它 >活動報名|3DCAT實時渲染雲行業生態合作系列沙龍之“雲XR如何賦能虛擬模擬實驗教學”線上活動邀您參會

活動報名|3DCAT實時渲染雲行業生態合作系列沙龍之“雲XR如何賦能虛擬模擬實驗教學”線上活動邀您參會

JVM的效能優化可以分為程式碼層面和非程式碼層面。  在程式碼層面,大家可以結合位元組碼指令進行優化, 1、比如一個迴圈語句,可以將迴圈不相關的程式碼提取到迴圈體之外,這樣在位元組碼層面就不需要重複執行這些程式碼了。 2、finally 中級的關閉資源 3、 適用集合框架的時候指定長度,防止他不夠的時候,擴容,導致資源浪費。   在非程式碼層面,一般情況可以從引數、記憶體、GC以及cpu佔用率等方面進行優化。 注意,JVM調優是一個漫長和複雜的過程,而在很多情況下,JVM是不需要優化的,因為JVM本身已經做了很多的內部優化操作,大家千萬不要為了調優和調優。 1.1 引數優化
(1)‐XX:MaxTenuringThreshold 2 
該引數主要是控制新生代需要經歷多少次GC晉升到老年代中的最大閾值。在JVM中用4個bit儲存(放在物件頭中),所以其最大值是15。
但並非意味著,物件必須要經歷15次YGC才會晉升到老年代中。例如,當survivor區空間不夠時,便會提前進入到老年代中,但這個次數一定不大於設定的最大閾值。
(2)‐XX:PretenureSizeThreshold 5 超過多大的物件直接在老年代分配,避免在新生代的Eden和S區不斷複製 67 
(3)‐XX:+/‐ UseAdaptiveSizePolicy 8
會動態調整 Eden、Survivor 的大小,有些情況存在Survivor 被自動調為很小,比如十幾MB甚至幾MB的可能,這個時候YGC回收掉 Eden區後,還存活的物件進入Survivor 裝不下,
就會直接晉升到老年代,導致老年代佔用空間逐漸增加,從而觸發FULL GC,如果一次FULL GC的耗時很長(比如到達幾百毫秒),那麼在要求高響應的系統就是不可取的。
(4)‐XX:SurvivorRatio 11 預設值為8 
它定義了新生代中Eden區域和Survivor區域(From倖存區或To倖存區)的比例,預設為8,也就是說Eden佔新生代的8/10,From倖存區和To倖存區各佔新生代的1/10 
1.2 記憶體調優   可以根據業務場景,挑戰yang:old 區的比例。比如秒殺。預設 old:yang = 2:1 如果公司記憶體緊張,可以短暫調到 1:2.

 

 

1.3 GC調優  根據不同GC垃圾收集器的特性。為不同的區域選擇為不同GC垃圾收集器。   1.8JVM效能優化指南