写点什么

Java 7 Hotspot 循环 Bug 详解

  • 2011-08-04
  • 本文字数:767 字

    阅读完需:约 3 分钟

上周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

2011-08-04 02:414194
用户头像

发布了 135 篇内容, 共 62.8 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

第三周作业

icydolphin

极客大学架构师训练营

为什么Rust的println!不会发生所有权转移?

袁承兴

rust 元编程

架构师训练营 Week3 代码重构 - 学习总结 设计模式

spring 设计模式 JUnit

当区块链遇见共享经济,会碰撞出怎样的火花?

CECBC

区块链

架构师训练营第三周命题作业

成长者

极客大学架构师训练营

架构师训练营第 1 期 week2

张建亮

极客大学架构师训练营

集中日志系统ELK

Java个体户

ELK

Golang单例模式手写稿

Jacky.Chen

架构师训练营第二周作业

xs-geek

分布式系统的核心:共识问题

多颗糖

分布式计算 计算机基础 分布式系统 架构师

第三周-代码重构-学习总结

刘希文

架构师训练营第 1 期 week3

张建亮

极客大学架构师训练营

LeetCode题解:242. 有效的字母异位词,数组计数,JavaScript,详细注释

Lee Chen

大前端 LeetCode

[Python3]三子棋游戏!祝大家中国71周年国庆节快乐!

MengZian

Python

设计模式第三周作业「架构师训练营第 1 期」

天天向善

单例模式 组合模式

week03

……

Mongodb异常关闭,再次启动报错

MySQL从删库到跑路

mongodb

第三周作业

极客大学架构师训练营

区块链3.0时代:大规模商业应用开发即将实现

CECBC

区块链 数字金融

Linux忘记root密码怎么办

MySQL从删库到跑路

Linux 服务器 root密码 root

架构师训练营第二周总结

xs-geek

spring-boot-route(二)读取配置文件的几种方式

Java旅途

Java Spring Boot

区块链可以为物联网做些什么?

CECBC

区块链 物联网

架构师训练营第三周学习总结

成长者

极客大学架构师训练营

架构师训练营第 1 期 week2 总结

张建亮

极客大学架构师训练营

设计模式第三周总结「架构师训练营第 1 期」

天天向善

最完整的PyTorch数据科学家指南(2)

计算机与AI

学习 PyTorch

Springboot 邮件任务

hepingfly

springboot 发送邮件

JD-GUI反编译jar包为Java源代码

MySQL从删库到跑路

Java jar 程序员 Spring Boot jar包的小秘密

Week 3 Assignment

Yinan

vagrant 开发环境配置

孙志平

Java 7 Hotspot循环Bug详解_Java_Alex Blewitt_InfoQ精选文章