JDialog e OutOfMemoryError

Estou fazendo uns testes, e vi algo que não entendi bem.
O programa:

public static void main(String[] args) {
	for (int i = 0; true; i++) {
		System.out.println(i);
		JDialog d = new JDialog();
		d.setVisible(true);
		d.setVisible(false);
	}
}

roda eternamente, sem travar o sistema. Enquanto o programa:

public static void main(String[] args) {
	for (int i = 0; true; i++) {
		System.out.println(i);
		JOptionPane optionPane = new JOptionPane();
		JDialog d = optionPane.createDialog("");
		d.setVisible(true);
		d.setVisible(false);
	}
}

trava (no meu pc, que tem 2G de ram, ele gera OutOfMemoryError no índice 625).

Tentei ver alguma variável estática no JOptionPane fazendo referência a JDialog, mas não é isso não…
Alguém sabe explicar?

no seu for nao possui condição de finalização.

ex. for(int i=0; i < 10; i++){

o q vc tem é um loop infinito e a cada passagem vc instancia um objeto e isso chega uma hora que esgota a memoria

Ambos os exemplos são de loop infinito.
O primeiro roda eternamente sem travar o sistema, enquanto o segundo trava na 625ª dialog (no meu pc).
Por quê um trava e o outro não?

Ao que me parece, é uma “desatenção” do gc.