在看线程池源码处理空闲时间逻辑时,看见 for(;;) ,之前也见过,但是项目代码中无限循环经常使用 while(true),就查了一下有何区别。
写一个测试类,创建两个方法,分别使用for(;;) 和 while(true) 实现无限循环,查看编译后的class 文件(命令:javap -c Test.class) 都是优化成goto没区别 。
但是在C语言中有区别,两者底层实现不同:
while(1)在编译后:
mov eax,1
test eax,eax
je foo+23h
jmp foo+18h
for(;;)在编译后:
jmp foo+23h
for(;;)在c语言中指令较少,也能够节省内存,没有判断跳转,是比while(1)更好的无限循环。
参考链接: https://blog.csdn.net/Message_lx/article/details/81075688, https://www.sohu.com/a/240751118_100109711
来源:oschina
链接:https://my.oschina.net/u/3488841/blog/4276807