考虑下面的 java代码:
public int main() {
    int i = 1111;

    for (; rules(i) != true && i < Integer.MAX_VALUE; i++) {
        //LOG.debug("Testing i: " + i);
    }

    System.out.println("The mystery number is: " + i);

    return i;
}

protected boolean rules(int nb) {
    //...
}

我发现即使for循环继续评估是真的,循环将在其身体空的时候停止执行.

主要的最终结果是错误的(我是16698约98%的时间,有时更高/更低).

如果我从循环体取消注释LOG语句,循环将继续运行,直到循环继续评估为false.

我使用的JVM是MacOS X VM 1.6.0.

是否进行某种运行时优化?
>这个运行时优化可以被认为是一个bug吗?
>还是说在Java规范的某个地方,为了延续评估不应该运行功能操作?

ps:完整的代码源其单元测试可在这里:https://gist.github.com/dirtyhenry/5804130

更新:

>我只通过junit运行代码.可以对这种行为负责吗?

更新2:

java -version

收益:

java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-456-11M4508)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-456,mixed mode)

解决方法

我已经看到一些关于SO循环优化的参考仅在超过10000次迭代后发生.也许这就是为什么“魔术数字”通常在16000左右?

这里有一个很好的讨论

JVM option to optimize loop statements

java – 为什么我的JVM做一些运行时循环优化,并使我的代码bug?的更多相关文章

  1. Swift社交应用文本输入优化汇总

    本文将汇总一下Swift社交应用文本输入优化技巧。

  2. Swift思量与初探:我需要学习Swift吗?

    最近,除了N多的基于Swift的服务端开发框架,笔者不由深思,到底该这么评价Swift呢?前两点在Swift的语法和语言特性中已经表现得淋漓尽致:像是尾随闭包,枚举关联值,可选值和强制的类型安全等都是Swift显而易见的优点。综上所述,Swift拥有着被广泛使用以及当做第一学习语言的潜质。Swift在语法层次上会更加高级,并且Swift并没有使用GC机制,因此可以与C更好地相兼容。Swift中的注释与C语言的注释非常相似。

  3. jQuery代码优化方法总结

    本篇文章给大家总结了关于jQuery代码优化方法,如果你这方面有需求,跟着小编一起学习下吧。

  4. 24条货真价实的PHP代码优化技巧

    这篇文章主要为大家分享了24条货真价实的PHP代码优化技巧,帮助大家更好的进行PHP项目开发,感兴趣的小伙伴们可以参考一下

  5. windows-8 – Windows 8是否编译JavaScript?

    是.Jcol由Chakra引擎在Windows8上执行.与.NET即时编译器类似,它将javascript转换为优化的机器代码.此外,谷歌的V8和Mozilla的TraceMonkey引擎采取的方法.一些背景信息ishere.

  6. 预编译的Windows OMF BLAS / LAPACK?

    是否有任何地方可以以OMF对象格式为Windows预编译BLAS和LAPACK二进制文件?作为最后的手段,有没有人知道如何使用DMC来构建clapACK,CBLAS和F2CLIB?这些构建过程似乎完全针对GCC工具链.“…接缝完全面向GCC工具链.”这是一个低调的.Blas是高度“优化”的,在一个特定版本的gcc,2.4.3之前编写.这可能是可能的,从源的未优化版本开始,使用OpenWatcom工具链进行编译,以便生成32位OMF,但是我恐怕会涉及很多foo,结果将是死慢码.

  7. php – 如何使用于图像大小调整的代码可以工作并针对各种图像扩展进行优化?

    基本上,我在我的网站上使用PHP和HTML.我是PHP的新手.所以如果我在我的代码或方法中犯了任何错误,我请求你纠正我.我编写了用于重新调整用户上传到特定大小(即特定宽度和高度)的图像的代码.我想制作尺寸为940px*370px的上传图片.但在这样做的同时,我想照顾以下问题:>修改后维护到服务器的图像的整体质量应与用户上传的图像相同.它不应该缩小或拉伸,它的原始颜色不应受到干扰等.图像的所有内容应

  8. PHP中的FOR循环性能

    由于我的研究使我相信,for循环是PHP中最快的迭代结构,以使其更清晰,您认为以下哪些更快?示例一示例二我的逻辑是,在每次迭代中,每次迭代访问myLargeArray的长度比在实例二中访问一个简单的整数值更昂贵.那是对的吗?

  9. strcpy在centos6.x,gcc4.4.7版本上会有bug,自我移动导致覆盖错误overlap

    继续发现strncpy和sprintf也会遇到同样的问题。采用memcpy就没有问题了看了下源码,跟strcpy也没什么区别暂时不明白为什么strcpy、strncpy、sprintf在gcc4.4.7下,自我移动会导致问题。一直到越界崩溃但是实际结果是121234565678在几个机器上试了下在gcc4.1.1上,是12121212121。。。。。。崩溃Gcc4.4.7显示121234565678gcc4.8.5显示12123456789应该是在4.4.7上确实有优化,但是4.8.5应该是解决了,而且连

  10. angular – 找不到模块:错误:无法解析’./$$_gendir/app/app.module.ngfactory’

    升级我的angular-cli后,我得到以下错误当我运行build–prod并且在没有任何参数的情况下运行build时工作正常,会发生此错误,当您在角度2中运行ngbuild时,最新的angular-cli会自动运行–aot参数,因此它正在尝试优化您的代码。很可能是你的app.module.ts中有**forRoot()**的软件包我建议更新所有包。更新包的简单方法是使用ncunpm包,如下所示,我从HowdoIcorrectlyupgradeangular2tothelatestversion?获得它安

随机推荐

  1. 使用序列化将对象传递给另一个JVM – 相同的Java版本和jar(都运行我们的应用程序)

    但是想使用纯序列化到bytearray然后进行编码,将它从jvm1中的servlet1发送到jvm2中的servlet2局域网,在两个J2EE应用程序中设置相同的Java版本和jar)基本步骤是:–>将任何Serializable对象序列化为字节数组并生成字符串.确切的代码见下文>Base64输出1.是否需要基于64或可以跳过第2步?

  2. 所有JVM /系统中的Java,Object.hashCode()结果常量?

    Object.hashCode()的输出是否必须在同一个对象的所有JVM实现上相同?例如,如果“test”.hashCode()在1.4上返回1,它是否可能在1.6上返回2.或者如果操作系统不同,或者实例之间存在不同的处理器架构,该怎么办?

  3. Clojure的STM模型可以在多个JVM上运行吗?

    我知道Clojure在多核计算机上运行良好,但我想知道它是否适用于在多台计算机上分布的JVM集群?

  4. java – 加载时出现Eclipse jvm.dll错误

    解决方法按照评论中的要求.您的eclipse版本正在搜索jdk的x86版本.您应该检查您的eclipse是否是64位版本,如果没有,切换到64位jvm.

  5. java – 什么JVM优化导致这些性能结果?

    执行JavaREST服务性能测试我看到一个意外的模式:在每次调用中创建并返回相同值对象的方法比仅返回存储在类或对象字段中的值对象的另一个版本运行得更快.码:字节代码:>内联(更快):getstatic,invokestatic,invokevirtual,areturn>静态归档(较慢):getstatic,areturn>对象字段(较慢):aload,getfield,areturn性能(使用A

  6. java – JVM是否有计划在运行时支持泛型?

    你知道,就像CLR一样.有人甚至承认缺乏运行时通用信息是一个问题,并努力解决它?解决方法Java的设计者选择此解决方案来保持向后兼容性.从那时起,存在更多的Java代码,因此破坏向后兼容性会产生更糟糕的后果.所以我怀疑他们会改变他们的想法.

  7. 如何为多个jvm支持创建单例java类?

    任何想法,如何实现?

  8. java – 强制jvm返回本机内存

    参见英文答案>JVMsendingbackmemorytoOS3个我不时在需要大量内存的eclipse任务中运行.所以jvm在任务运行时吞下大约2-3GB的RAM,没关系.但是一旦jvm占用了那个内存它就不会释放它而且我有一种情况,当堆中使用的内存大约是200mb,总堆大小约为3gb时,这真的是不需要的,因为其他程序正在挨饿.我尝试了Max/MinHeapFreeRatio参数来强制jvm减少未使

  9. java – 获取给定JVM实例中所有当前加载的类的列表

    知道给定JVM实例当前加载哪些类是很方便的.例如,有没有办法让他们通过JVisualVM?

  10. java – JVM Spec,JVM Implementation,JVM Runtime之间的区别

    我读了以下几个字,但我想知道它们之间的差异……JVM规范,JVM实现,JVM运行时解决方法JVMSpec:描述JVM应如何表现的文档.JVM实现:基于JVMSpec的JVM实现.JVM运行时:JVM实现的一个实例.

返回
顶部