在这里,我们面对的是JIT编译器中的错误。编译器确定在分配后已填充分配的数组
Arrays.fill(...),但是在分配和填充之间的使用检查不正确。因此,编译器执行非法优化-
跳过分配数组的清零。
此错误放置在Oracle错误跟踪器中(错误ID
7196857)。不幸的是,我没有等待Oracle关于以下几点的任何澄清。如我所见,此错误是特定于操作系统的错误:它在64位Linux和Mac上绝对可重现,但是,正如我从评论中看到的那样,它在Windows上不定期复制(对于类似版本的JDK)。此外,很高兴知道何时会修复此错误。
目前只有建议:如果您依赖JLS创建新声明的数组,请不要使用JDK1.7.0_04或更高版本。
10月5日更新:
在2012年10月4日发布的新JDK 7u10 Build
10(早期版本)中,此错误至少已在Linux
OS中修复(我没有测试其他错误)。感谢@Makoto,他发现该错误不再对Oracle错误数据库开放供公众访问。不幸的是,我不知道Oracle从公共访问中删除它的原因,但是它在Google
缓存中可用。此外,此错误已引起Redhat的注意:为此漏洞分配了CVE标识符CVE-2012-4420
(bugzilla)和CVE-2012-4416(bugzilla)。



