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