- 大頁面支持
- Linux上的大頁面支持
- 1.-XX:+UseLargePages
- 2.修改OS的配置(依據Linux發行版和內核不同,其修改也不同)
- 3.如Linux中大頁面配置不正確, HotSpot VM會接受上面選項,但是會報告無法獲取大頁面,最后回退到OS默認支持的頁面大小
- 4.了解即可, 基本碰不到要配置此參數
- Linux上的大頁面支持
- 偏向鎖
- -XX:+UseBiasedLocking
- 當只有一個線程鎖定該對象,沒有鎖沖突的情況下,其鎖開銷接近lock-free
- 對于存在鎖切換的應用,可以關閉它, -XX:-UseBiasedLocking
- -XX:+AggressiveOpts使用這個參數時, JDK5 HotSpot VM默認開啟偏向鎖
- 加快編譯(實驗性優化or最新的優化: 實驗性的優化方法可能導致無法預期的JVM行為,等它經過足夠多的證明再使用)
- There's a JVM option -XX:+AggressiveOpts that supposedly makes your JVM faster. Lots of people turn this on in Eclipse to try to make it faster. But it makes your JVM less correct. Today I found it to be the cause of a longstanding bug in dx.
- 如果關注應用的穩定性甚于性能, 請不要使用這個參數
- 逃逸分析(escape analysis)
- -XX:+DoEscapeAnalysis
- 評估Java對象可見范圍, 尤其是指由某個線程創建的Java對象在另一個線程中可以訪問,此時稱該對象逃逸了.
- 如果Java對象不發生逃逸,則可以采取其他方法進行優化,這種優化技術稱為逃逸分析
- JIT編譯器可以采取的優化技術有
- 1.對象展開
- 2.標量替換
- 3.棧上分配
- 線程的棧幀上分配而非堆,由于對象不逃逸,不被其他線程訪問,則可以在線程私有的棧幀上分配,減少堆上對象的數目,減輕gc的頻率
- 4.消除同步
- 如果該對象不逃逸,則當前線程持有該對象鎖,其他線程訪問不了該對象,則該鎖可以由JIT消除
- 5.消除垃圾收集的讀/寫屏障
- 對象不逃逸,該對象只能從線程本地的根節點訪問,因此在其他對象中存儲其地址時不需要執行讀或寫屏障
- 只有在對象可以被另一個線程訪問時才需要讀/寫屏障
- 讀或寫屏障
- 極端示例