- 大頁面支持
- Linux上的大頁面支持
- 1.-XX:+UseLargePages
- 2.修改OS的配置(依據(jù)Linux發(fā)行版和內(nèi)核不同,其修改也不同)
- 3.如Linux中大頁面配置不正確, HotSpot VM會接受上面選項,但是會報告無法獲取大頁面,最后回退到OS默認(rèn)支持的頁面大小
- 4.了解即可, 基本碰不到要配置此參數(shù)
- Linux上的大頁面支持
- 偏向鎖
- -XX:+UseBiasedLocking
- 當(dāng)只有一個線程鎖定該對象,沒有鎖沖突的情況下,其鎖開銷接近lock-free
- 對于存在鎖切換的應(yīng)用,可以關(guān)閉它, -XX:-UseBiasedLocking
- -XX:+AggressiveOpts使用這個參數(shù)時, JDK5 HotSpot VM默認(rèn)開啟偏向鎖
- 加快編譯(實驗性優(yōu)化or最新的優(yōu)化: 實驗性的優(yōu)化方法可能導(dǎo)致無法預(yù)期的JVM行為,等它經(jīng)過足夠多的證明再使用)
- 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.
- 如果關(guān)注應(yīng)用的穩(wěn)定性甚于性能, 請不要使用這個參數(shù)
- 逃逸分析(escape analysis)
- -XX:+DoEscapeAnalysis
- 評估Java對象可見范圍, 尤其是指由某個線程創(chuàng)建的Java對象在另一個線程中可以訪問,此時稱該對象逃逸了.
- 如果Java對象不發(fā)生逃逸,則可以采取其他方法進行優(yōu)化,這種優(yōu)化技術(shù)稱為逃逸分析
- JIT編譯器可以采取的優(yōu)化技術(shù)有
- 1.對象展開
- 2.標(biāo)量替換
- 3.棧上分配
- 線程的棧幀上分配而非堆,由于對象不逃逸,不被其他線程訪問,則可以在線程私有的棧幀上分配,減少堆上對象的數(shù)目,減輕gc的頻率
- 4.消除同步
- 如果該對象不逃逸,則當(dāng)前線程持有該對象鎖,其他線程訪問不了該對象,則該鎖可以由JIT消除
- 5.消除垃圾收集的讀/寫屏障
- 對象不逃逸,該對象只能從線程本地的根節(jié)點訪問,因此在其他對象中存儲其地址時不需要執(zhí)行讀或?qū)懫琳?/li>
- 只有在對象可以被另一個線程訪問時才需要讀/寫屏障
- 讀或?qū)懫琳?/li>
- 極端示例