Javaの致命的なバグで、特定の小数点数を処理しようとすると内部で無限ループが発生しハングアップするという問題です。
2011年2月くらいに話が広まり、いろいろなところでパッチ適用の対応に追われた事と思います。元々はPHPで発覚した問題だっのですが実はJavaでも同じ問題があったという話です。ロジックをパクって移植していたのでしょうか?
自分でも試してみましたが、簡単に再現できました。以下のソースを実行すると「Start.」は表示されますが、その後何も表示されず、処理は終わらずCPU使用率が上昇します。そしてパッチ適用ですぐに解消しました。怖いですね…。
public class InfiniteLoopTest { public static void main(String[] args) { System.out.println("Start."); double d = Double.parseDouble("2.2250738585072012e-308"); System.out.println("Value: " + d); System.out.println("End."); } } Oracle社の説明とパッチ。 |
Knowledge >