Nein, das ist einfach nicht möglich. Wenn der Compiler und die JVM dies tun würden, ist es wahrscheinlich, dass die Einschränkungen, die durch die Speichermodell der Programmiersprache Java verletzt werden würde.
Genauer gesagt, die _Synchronisationsauftrag_ Die in der Java-Sprachenspezifikation festgelegte Reihenfolge würde verletzt. Wenn ein Compiler oder eine JVM * alle "unerwünschten" Synchronisationen entfernen würde, dann würden alle weiteren Optimierungen gegen die Annahmen verstoßen, die ein Entwickler in Bezug auf die Synchronisationsreihenfolge (und die "happens-before"-Beziehung) gemacht hat. In Ihrem speziellen Fall wird in einem Compiler/JVM, der sich an das Java-Speichermodell hält, jedes Schreiben auf die Ganzzahl vor dem Lesen erfolgen.
Ein Compiler/JVM, der die Synchronisationen entfernt, würde lediglich zu einer Umgebung führen, in der das Speichermodell verletzt wird. Beispielsweise könnte das Inlining von Methoden durchgeführt werden, ohne dass der Compiler/die JVM eine Speichersperre vor dem Lesen des Integer-Wertes setzt, wodurch veraltete Werte aus einem Cache-Wert gelesen werden könnten.
* Der Verweis auf das Compiler/JVM-Duo ist beabsichtigt. Ein Compiler wird nur Bytecode ausgeben, der mit der JLS konform ist; eine JVM könnte einfach einen Fehler haben, bei dem die Anforderungen des Speichermodells trotzdem verletzt werden könnten. Im Interesse der Vollständigkeit des Speichermodells sollten sowohl der Compiler als auch die JVM die Anforderungen des Speichermodells erfüllen.