FreeOZ论坛

标题: Java问题,不知道算不算无聊 [打印本页]

作者: key    时间: 30-7-2009 13:39
标题: Java问题,不知道算不算无聊
假设在Java程序中执行一次乘法需要时间 x ,其他操作的时间可以忽略,请问下面的程序段
需要多少时间:
  1. int k = 100;

  2. for(int m = 0; m<20; m++)
  3. {
  4.   k = 42 * 1324;
  5. }
复制代码
从bytecode看来的结果是根本没有乘法运算。不知道是不是JDK 6直接优化掉了。
作者: coredump    时间: 30-7-2009 14:27
标题: 回复 #1 key 的帖子
这段代码放在任何稍有智能的编译器/语言里都会被预先求值,否则实现相关功能的程序员就应该被革职。
作者: desiderata    时间: 30-7-2009 16:30
请转CSDN
作者: key    时间: 30-7-2009 16:38
原帖由 coredump 于 30-7-2009 13:27 发表
这段代码放在任何稍有智能的编译器/语言里都会被预先求值,否则实现相关功能的程序员就应该被革职。


有的东西还是很难说的。龟定呀
比如那个m,完全可以eliminate掉,为何还要苦苦求值呢?
  1. public static void main(java.lang.String[]);
  2.   Code:
  3.    0:   sipush  100
  4.    3:   istore_1
  5.    4:   iconst_0
  6.    5:   istore_2
  7.    6:   iload_2
  8.    7:   bipush  20
  9.    9:   if_icmpge       22
  10.    12:  sipush  55608
  11.    15:  istore_1
  12.    16:  iinc    2, 1
  13.    19:  goto    6
  14.    22:  return

  15. }
复制代码

作者: someonehappy    时间: 30-7-2009 17:43
如果从大局上看这是在一个多线程的系统里面,我就是想要这样一个很笨的方法来在这一个线程里面消耗点时间,岂不是就会因为聪明的编译器而失败了?

也就是说如果编译器比我聪明在有些问题上比我想的复杂,那我就必须想的更复杂否则就会出错了。
作者: bfox    时间: 30-7-2009 18:29
呵呵, 聪明的编译器碰到笨程序员也没办法。
耗时可以用sleep. 这样的计算对现在的cpu来说起不到耗时的作用。
作者: jfding    时间: 30-7-2009 18:49
好像知道编译器优化的人,很认为有本事,大肆攻击别人。bs
作者: coredump    时间: 30-7-2009 18:57
原帖由 jfding 于 30-7-2009 17:49 发表
好像知道编译器优化的人,很认为有本事,大肆攻击别人。bs


过虑了,这里没有啥“大肆攻击”




欢迎光临 FreeOZ论坛 (https://www.freeoz.org/ibbs/) Powered by Discuz! X3.2