`
trydofor
  • 浏览: 150493 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

while(ture) 和 for(;;)

阅读更多
多线程下的if,经常是while(...)
对于死等,在jdk中很多使用了 for(;;)
狗了一下 while(true) vs for(;;),有种说法是汇编级别,for(;;)更节省。
当然,该结论没代码,没版本,没验证方法,暂报疑惑。且22世纪了,代码可以傻些。

    while (true) { //(1)
    //for (;;) { //(2)
    //for (int i = 1; i > 0; i++) //(3)
        if (args.length == 1) break;
        if (args.length == 2) break;
    }


sun jdk 6 ,默认编译。
使用 Java Bytecode Editor和 JD 看了一下 *.class

能看到 (1)和(2) 被编译器弄成一样了。
等效于:
while ((args.length != 1) && (args.length != 2));

(3)等效于
for (int i = 1; i > 0; i++)
    if ((args.length == 1) || (args.length == 2)) break;


基本结论,
1. 个人习惯,爱用哪个用哪个,编译器都会私下做些事。
2. for (int i = 1; i > 0; i++) 不是死等,上限是正数最大值。
所以对于不太确定是否死掉的死等,这个算是活等。

分享到:
评论
2 楼 trydofor 2011-03-28  
(2)javap -c TestFor
(1)javap -c TestWhile
都得到

public static void main(java.lang.String[]);
  Code:
   0:   aload_0
   1:   arraylength
   2:   iconst_1
   3:   if_icmpne       0
   6:   return
1 楼 <>++< 2011-03-28  
while (true);       mov eax,1 
                          test eax,eax
                          je foo+23h
                          jmp foo+18h

for (;;);         jmp foo+23h   

for(; ; )效率更高应该没错, 不过可读性差了点, 改成for(; true; )可读性能好点吧

相关推荐

    Microservice-Architecture-Aligning-Principles-Practices-and-Culture.pdf

    ture. We offer this design-centric approach because, as we talked to several companies about their programs, we discovered one of the keys to their success was the willing‐ ness to not stick to a ...

    C# for CSDN 乱七八糟的看不懂

    abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit ...

    华南理工大学计算机全英班编译原理实验2

    1Complete a recursive–descent parser for TINY+. Parser gives syntax analysis to the tokens generated by the scanner. Output of the parser is an abstract syntax tree. 2Semantic analyzer builds the ...

    简单词法分析器C#含代码

    关键字:int char if else real for do while 数字、变量名(不使用下划线,头字母不为数字)、符号 词法分析生成*.TAKEN、*.SymbolTable两个文件。 保留部分语法分析接口,可以继续完成。 词法分析部分在Lex文件夹...

    rankingSvm

    ed question and the user profile, while ignoring the important statistical features, including the question-specific statistical fea-ture and the user-specific statistical features. Moreover, ...

    算法分析题5-41

    3. `While(ture)`:这是一个无限循环,直到找到最大团或者所有可能的情况都尝试过。 4. `While(i(i)) {x[i++]=1;cn++;}`:在此循环中,如果节点`i`可以加入当前团(由`ok(i)`函数判断),则将其添加到团中(`x[i++]=...

    语言程序设计课后习题答案

    然后用while和do…while语句完成同样的循环。 解: for循环: for (int n = 100; n ; n += 2); while循环: int x = 100; while (n ) n += 2; do…while循环: int n = 100; do { n += 2; } while(n ); 2-14 if...

    matlab 课后答案

    - 示例中,我们使用`for`循环和`while`循环分别计算相同的数学表达式,并比较它们的执行时间。 以上是对所给题目中涉及的知识点的详细解析,希望能帮助理解和掌握MATLAB的基本用法和编程技巧。

    回文字符串:判断一个是否是回文字符串。回文字符串是指正序(从左向右)和倒序(从右向左)读都是一样的字符串。

    while (n &gt;= 0 && m ) { if (strs[n] != strs[m]) return false; m++; n--; } return true; } ``` 这段代码首先计算字符串的长度,然后设置两个指针 `m` 和 `n` 分别从字符串的开头和结尾开始移动。如果在...

    《数据结构 1800题》

    WHILE i&lt;n BEGIN FOR j:=1 TO n DO x:=x+1;i:=i*2 END; 13. 下面程序段中带有下划线的语句的执行次数的数量级是( ) 【合肥工业大学 2001 三、1(2分)】 i:=n*n WHILE i&lt;&gt;1 DO i:=i div 2; 14. 计算机执行下面的...

    数位板压力测试

    The interface gives standard access to as many features as possible, while leaving room for future ex¬ten-sions and vendor-specific customizations. Applications should be able to get the tablet ...

    JS笔记大全.docx

    isNaN() 函数的作用是用来判断参数是否为数字 ture 的话就是为数字,false 就是不是数字。 JavaScript 事件 onclick 事件:是鼠标单击事件 onmouseover 事件:是鼠标移入事件 onmouseout 事件:是鼠标移出事件 ...

    C++11的future和promise、parkged_task使用

    获取结果的方式有`get`、`wait`和`wait_for`。`get`会阻塞直到结果可用,并返回结果;`wait`仅阻塞直到任务完成,不返回结果;`wait_for`则在指定时间内等待,如果超时则返回`timeout`。 下面是一个`future`和`...

Global site tag (gtag.js) - Google Analytics