突然想到了這個問題,問了一下週圍的人,竟然沒有人回答出來,我這裏就給一個官方的實現吧
private static int powerOfTwo(int res) {
if (res <= 2) {
return 2;
}
res--;
res |= res >> 1;
res |= res >> 2;
res |= res >> 4;
res |= res >> 8;
res |= res >> 16;
res++;
return res;
}
其實,這段代碼並不是我自己拍腦袋想到的,具體的實現可以參照netty的PoolThreadCache的抽象的靜態內部類private abstract static class MemoryRegionCache的實現函數powerOfTwo,對內存感興趣的同學可以深入理解一下netty的內存管理,建議配合《深入理解linux操作系統》,或者本身有不錯的內存知識和經驗