Java OutOfMemoryError seltsames Verhalten

Angenommen, wir haben einen maximalen Speicher von 256 MB, warum funktioniert dieser Code:

public static void main(String... args) {
  for (int i = 0; i < 2; i++)
  {
      byte[] a1 = new byte[150000000];
  }
  byte[] a2 = new byte[150000000];
}

aber dieser wirft einen OOME?

public static void main(String... args) {
  //for (int i = 0; i < 2; i++)
  {
      byte[] a1 = new byte[150000000];
  }
  byte[] a2 = new byte[150000000];
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage