Posts Tagged ‘memory’

Zagadka z Java Memory

Ostatnia zagadka okazała się bardzo łatwa. Zatem dziś pora na nieco trudniejszą i ciekawszą.

Oto kod zagadki.

public class JVMPuzzle {

	private final int dataSize = (int) (Runtime.getRuntime().maxMemory() * 0.6);

	public void go() {
		{
			byte[] bytes1 = new byte[dataSize];
		}

//		for (int i = 0; i < 3; i++) {
//			System.out.println("Barista prosi: JVM zwolnij pamięć!");
//		}

		byte[] bytes2 = new byte[dataSize];
	}

	public static void main(String[] args) {
		new JVMPuzzle().go();
	}
}

Po skompilowaniu i uruchomieniu powyższego kodu otrzymujemy java.lang.OutOfMemoryError:

<barista@javaczyherbata.pl> java JVMPuzzle
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at JVMPuzzle.go(JVMPuzzle.java:14)
	at JVMPuzzle.main(JVMPuzzle.java:18)

Natomiast jeśli odkomentujemy linie 10-12, skompilujemy i uruchomimy program ponownie, to błąd braku pamięci się nie pojawi.
Jak to jest, że JVM słucha się Baristy? 🙂