继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java中for(;;)和while(true)有啥区别?

2018-07-11 09:07:068488浏览

若鱼1919

2实战 · 7手记 · 1推荐
TA的实战

群里面有小伙伴提了个问题,说在看并发源码的时候,很多时候源码中都使用for(;;)而不是使用while(true),这两个有什么区别吗?

这种问题,在java里面,最简单有效的办法就是打印字节码看一下,javap再次华丽丽的登场:

https://img3.mukewang.com/5b4556530001625609830316.jpg

字节码一模一样,能有啥区别?因此,在java里面,就看个人的爱好了,二者没区别!

更过关于java字节码的内容可以观看我的一个视频课程:Java生产环境下性能监控与调优详解

为啥网上有的文章说二者有区别呢?因为那是在C语言中!

在C语言中, while(1)在编译后:

mov eax,1  
test eax,eax 
je foo+23h
jmp foo+18h

for(;;)在编译后:

mp foo+23h

这里的区别就非常明显了,for(;;)在c语言中指令较少,也能够节省内存,没有判断跳转,是比while(1)更好的无限循环。

C编译后的指令参考:https://blog.csdn.net/baidu_29029173/article/details/51175799

最后,欢迎大家观看我的两个视频课程:

Java生产环境下性能监控与调优详解   Java秒杀系统方案优化 高性能高并发实战

打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP