背景
JDK并发源码中有大量的自旋操作,都使用for(;;)的操作。同样都可以处理自旋的while(true)却很少看到,二者到底有什么区别?
分析过程
查询字节码
使用bytecode插件查看两种语法的class文件(JDK1.8)结果相同,不存在执行效率差异的问题
L0
LINENUMBER 13 L0
FRAME SAME
GOTO L0
查阅资料
查阅过程有两种验证语法等效的方法
- 准备
- 写一个Test.java代码,使用while(true),并编译成Test.class
- 将Test.class重命名为Test1.class
- 将Test.java代码改成for(;;),并编译成Test.class
-
对比编译文件
-
使用jd-gui.exe反编译class
https://stackoverflow.com/questions/8880870/java-for-vs-whiletrue
结论
JDK中二者使用并无区别,其他语言中while(true)存在编译告警
JDK源码只是开发者的个人习惯