Java: int-Array wird mit Elementen ungleich Null initialisiert

Nach Angaben der JLS ist eineint Das Array sollte unmittelbar nach der Initialisierung mit Nullen gefüllt werden. Ich bin jedoch mit einer Situation konfrontiert, in der dies nicht der Fall ist. Ein solches Verhalten tritt zuerst in JDK 7u4 und auch in allen späteren Updates auf (ich verwende eine 64-Bit-Implementierung). Der folgende Code löst eine Ausnahme aus:

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);
    }

Die Ausnahme tritt auf, nachdem die JVM die Kompilierung des Codeblocks durchgeführt hat und tritt nicht mit auf-Xint Flagge. Zusätzlich ist dieArrays.fill(...) Anweisung (wie alle anderen Anweisungen in diesem Code) ist erforderlich, und die Ausnahme tritt nicht auf, wenn sie nicht vorhanden ist. Es ist klar, dass dieser mögliche Fehler mit einer gewissen JVM-Optimierung einhergeht. Irgendwelche Ideen wegen eines solchen Verhaltens?

Aktualisieren:
Ich sehe dieses Verhalten auf einer HotSpot 64-Bit-Server-VM, Java-Version von 1.7.0_04 bis 1.7.0_10 unter Gentoo Linux, Debian Linux (beide Kernel 3.0-Version) und MacOS Lion. Dieser Fehler kann immer mit dem obigen Code reproduziert werden. Ich habe dieses Problem nicht mit einem 32-Bit-JDK oder unter Windows getestet. Ich habe bereits einen Fehlerbericht an Oracle gesendet (Fehler-ID 7196857), der in wenigen Tagen in der öffentlichen Oracle-Fehlerdatenbank angezeigt wird.

Aktualisieren:
Oracle hat diesen Fehler in seiner öffentlichen Fehlerdatenbank veröffentlicht:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7196857

Antworten auf die Frage(2)

Ihre Antwort auf die Frage