Java: массив int инициализируется ненулевыми элементами

Согласно JLS,int массив должен заполняться нулями сразу после инициализации. Однако я столкнулся с ситуацией, когда это не так. Такое поведение происходит в первую очередь в JDK 7u4, а также во всех последующих обновлениях (я использую 64-битную реализацию). Следующий код выдает исключение:

public static void main(String[] args) {
        int[] a;
        int n = 0;
        for (int i = 0; i < 100000000; ++i) {
            a = new int[10];
            for (int f : a)
                if (f != 0)
                  throw new RuntimeException("Array just after allocation: "+ Arrays.toString(a));
            Arrays.fill(a, 0);
            for (int j = 0; j < a.length; ++j)
                a[j] = (n - j)*i;
            for (int f : a)
                n += f;
        }
        System.out.println(n);
    }

Исключение возникает после того, как JVM выполняет компиляцию блока кода, и не возникает при-Xint флаг. Кроме того,Arrays.fill(...) оператор (как и все другие операторы в этом коде) необходим, и исключение не происходит, если оно отсутствует. Ясно, что эта возможная ошибка ограничена некоторой оптимизацией JVM. Есть идеи по поводу такого поведения?

Update:
Я вижу такое поведение на 64-битной виртуальной машине HotSpot, версия Java от 1.7.0_04 до 1.7.0_10 в Gentoo Linux, Debian Linux (обе версии ядра 3.0) и MacOS Lion. Эта ошибка всегда может быть воспроизведена с кодом выше. Я не тестировал эту проблему с 32-битным JDK или в Windows. Я уже отправил отчет об ошибке в Oracle (идентификатор ошибки 7196857), и он появится в общедоступной базе данных ошибок Oracle через несколько дней.

Update:
Oracle опубликовал эту ошибку в своей общедоступной базе данных ошибок:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7196857

Ответы на вопрос(2)

Ваш ответ на вопрос