BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Java 7 Hotspot循环Bug详解

| 作者 Alex Blewitt 关注 4 他的粉丝 ,译者 丁雪丰 关注 4 他的粉丝 发布于 2011年8月5日. 估计阅读时间: 2 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

上周Java 7 GA发布后,新JIT默认开启的优化中发现了一个问题。虽然这个问题最早是在Lucene搜索索引器的一个用例中出现的,但是它也有可能普遍存在于其他代码之中。

这个Bug引来了不少杞人忧天的文章,例如《Don't use Java 7 for anything》,其中暗示所有循环都有问题。事实上,虽然存在一个有效的Bug(循环可能无法正确执行或者引起SIGSEGV崩溃),但是这个Bug从Java 6开始就有了,如果开启了-XX:+OptimizeStringConcat-XX:+AggressiveOpts优化就会发生这个问题。

这个问题实际只会发生在特定的循环(循环体可能会修改循环条件)中,该问题的补丁中对此做了说明。在以-Xint(解释模式)运行的情况下不会发生这个问题,但在-server模式下就会有问题,服务器端应用程序很有可能就会使用这种模式。

如果问题不算太严重,出于此Bug带来的公众压力,Java 7 Update 1中会包含该补丁。由于Java 7刚刚发布,目前还不会被用于生产环境,而且它也不是这方面发现的第一个问题(Oracle在后续版本中修复了这个问题)。与此同时,问题描述中指出可以通过 -XX:-UseLoopPredicate标志来关闭这个特定的优化。

在Lucene和Solr项目中最早发现该问题的Uwe Schindler详细记录了Bug背后的故事,包含后续的反应(以及过激反应)。他记录到Twitter上大家的反应和后续的文章将Bug的优先级提高了,它的补丁将被放在Java 7 Update 1中,而不是Java 7 Update 2。但是,他也说了,尽管高优先级Bug(会导致SIGSEGV)会在Java 7 Update 1中修复,但是还有两个其他Bug仍是中优先级。

正如Robert Muir分析中所说的,因为这些优化都是在循环最少10,000次后才被引入的,所以很多测试都覆盖不到。已经有了补丁,会纳入以后的Java 7更新中,禁用LoopPredicate优化也能让Java 7摆脱这些问题。

查看英文原文:Java7 Hotspot Loop Bug Details

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

寄予厚望 by 黄 海平

可能真的不是大家太敏感了,而是java这么久没有重大更新,人们寄予了太。。。。。。

期望高了 by simon wang

失望也大,抱着一颗平静的性5去看这个问题

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT