那些精妙的位操作(持續(xù)更新)

個(gè)人興趣原因, 會(huì)嘗試閱讀很多開源的框架以及語言的源代碼。也發(fā)現(xiàn)了很多精妙的位運(yùn)算, 如果本人來實(shí)現(xiàn)可能需要各種繁瑣的計(jì)算平斩。但是別的開發(fā)者大多數(shù)情況只需一句話就搞定了。感觸頗深, 現(xiàn)總結(jié)如下:

判斷val是否是2的冪次方

private static boolean isPowerOfTwo(int val) {
    return (val & -val) == val;
}

代碼出自Netty。詳情可見 https://github.com/netty/netty/blob/00afb19d7a37de21b35ce4f6cb3fa7f74809f2ab/common/src/main/java/io/netty/util/concurrent/DefaultEventExecutorChooserFactory.java

能看到該類被打上了@UnstableApi標(biāo)簽荐糜。的確在master目前已經(jīng)找不到該類的蹤跡了璃弄。

hotspot的object alignment

// 這里是向上對齊的宏肝断。比如size是20. 對齊大小alignment是8, 則嘗試對齊到24=8*3.
#define align_size_up_(size, alignment) (((size) + ((alignment) - 1)) & ~((alignment) - 1))
// 這里是向下對齊的宏迂尝。比如size是20. 對齊大小alignment是8, 則嘗試對齊到16=8*2.
#define align_size_down_(size, alignment) ((size) & ~((alignment) - 1))  

代碼出自大名鼎鼎的hotspot。用來處理對象對齊茂蚓。詳情可見
http://hg.openjdk.java.net/jdk-updates/jdk9u/hotspot/file/22d7a88dbe78/src/share/vm/utilities/globalDefinitions.hpp#l484

typeArrayOop.hpp(2019.03.28 update)

http://hg.openjdk.java.net/jdk-updates/jdk9u/hotspot/file/22d7a88dbe78/src/share/vm/oops/typeArrayOop.hpp#l156

// 這里偷了個(gè)巧壕鹉。LogHeapWordSize在64位下默認(rèn)是3, 這里等于是除以8. 然后通過左邊添加(HeapWordSize-1)來保證除后的HeapWord個(gè)數(shù)剛好能包住bytes。
julong size_in_words = ((size_in_bytes + (HeapWordSize-1)) >> LogHeapWordSize);

計(jì)算內(nèi)存對齊(2019.04.03 update)

http://hg.openjdk.java.net/jdk-updates/jdk9u/hotspot/file/22d7a88dbe78/src/share/vm/memory/allocation.hpp#l42

思路是和 typeArrayOop.hpp 的方式一致聋涨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晾浴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牛郑,更是在濱河造成了極大的恐慌怠肋,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淹朋,死亡現(xiàn)場離奇詭異,居然都是意外死亡钉答,警方通過查閱死者的電腦和手機(jī)础芍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來数尿,“玉大人仑性,你說我怎么就攤上這事∮冶模” “怎么了诊杆?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵歼捐,是天一觀的道長。 經(jīng)常有香客問我晨汹,道長豹储,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任淘这,我火速辦了婚禮剥扣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铝穷。我一直安慰自己钠怯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布曙聂。 她就那樣靜靜地躺著晦炊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宁脊。 梳的紋絲不亂的頭發(fā)上断国,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機(jī)與錄音朦佩,去河邊找鬼并思。 笑死,一個(gè)胖子當(dāng)著我的面吹牛语稠,可吹牛的內(nèi)容都是我干的宋彼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼仙畦,長吁一口氣:“原來是場噩夢啊……” “哼输涕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起慨畸,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤莱坎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后寸士,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檐什,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年弱卡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乃正。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婶博,死狀恐怖瓮具,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤名党,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布叹阔,位于F島的核電站,受9級(jí)特大地震影響传睹,放射性物質(zhì)發(fā)生泄漏耳幢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一蒋歌、第九天 我趴在偏房一處隱蔽的房頂上張望帅掘。 院中可真熱鬧,春花似錦堂油、人聲如沸修档。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吱窝。三九已至,卻和暖如春迫靖,著一層夾襖步出監(jiān)牢的瞬間院峡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工系宜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留照激,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓盹牧,卻偏偏與公主長得像俩垃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子汰寓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容