最近在閱讀JUC源碼的時候,由于多線程并發(fā)時情況比較復雜,所以源碼中經(jīng)常出現(xiàn)一些無限循環(huán)用于等待確滨诵浚或是某些目的的完成贱呐,通常我一般無限循環(huán)都是用while(true)丧诺,但是我發(fā)現(xiàn)在concurrent包中經(jīng)常用for(;;)來實現(xiàn)。這讓我產(chǎn)生了困惑奄薇,難道for(;;)會比while(true)性能更好一些嗎驳阎?于是我決定自己分別編譯比較一下。
我編寫了如下的程序:
public class Test2 {
public void whileTest() {
int i = 0;
while (true) {
i++;
}
}
public void forTest() {
int i = 0;
for (; ; ) {
i++;
}
}
}
通過IDEA的jclasslib插件查看到的字節(jié)碼如下:
while
for
觀察可以發(fā)現(xiàn)他們的字節(jié)碼是一模一樣的馁蒂,所以這兩種無限循環(huán)的實現(xiàn)方式在Java中其實是沒有任何卻別的呵晚,所以在源碼中大量出現(xiàn)的for(;;)可能只是Doung Lea 先生的個人代碼習慣。因此想用何種方式實現(xiàn)就全看個人喜好吧沫屡。
注:但在某些語言中這兩者可能是有區(qū)別的:在c語言中for(;;)指令較少等太,沒有判斷跳轉(zhuǎn)袒哥,更能夠節(jié)省內(nèi)存