找回密码
 FreeOZ用户注册
查看: 1585|回复: 7
打印 上一主题 下一主题

Java问题,不知道算不算无聊

[复制链接]
跳转到指定楼层
1#
发表于 30-7-2009 12:39:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
假设在Java程序中执行一次乘法需要时间 x ,其他操作的时间可以忽略,请问下面的程序段
需要多少时间:
  1. int k = 100;

  2. for(int m = 0; m<20; m++)
  3. {
  4.   k = 42 * 1324;
  5. }
复制代码
从bytecode看来的结果是根本没有乘法运算。不知道是不是JDK 6直接优化掉了。
回复  

使用道具 举报

2#
发表于 30-7-2009 13:27:14 | 只看该作者

回复 #1 key 的帖子

这段代码放在任何稍有智能的编译器/语言里都会被预先求值,否则实现相关功能的程序员就应该被革职。
回复  

使用道具 举报

3#
发表于 30-7-2009 15:30:56 | 只看该作者
请转CSDN
回复  

使用道具 举报

4#
 楼主| 发表于 30-7-2009 15:38:41 | 只看该作者


有的东西还是很难说的。龟定呀
比如那个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. }
复制代码
回复  

使用道具 举报

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

也就是说如果编译器比我聪明在有些问题上比我想的复杂,那我就必须想的更复杂否则就会出错了。
回复  

使用道具 举报

6#
发表于 30-7-2009 17:29:49 | 只看该作者
呵呵, 聪明的编译器碰到笨程序员也没办法。
耗时可以用sleep. 这样的计算对现在的cpu来说起不到耗时的作用。
回复  

使用道具 举报

7#
发表于 30-7-2009 17:49:11 | 只看该作者
好像知道编译器优化的人,很认为有本事,大肆攻击别人。bs
回复  

使用道具 举报

8#
发表于 30-7-2009 17:57:33 | 只看该作者
原帖由 jfding 于 30-7-2009 17:49 发表
好像知道编译器优化的人,很认为有本事,大肆攻击别人。bs


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

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 25-8-2025 11:02 , Processed in 0.040843 second(s), 24 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表