call by value - Daten vom Heap entfernen ?

Wieso? Irgendwann spring er an. Nimm das:

Java:
import java.util.ArrayList;


public class NodeCounter {

	
	public NodeCounter() {
		
		ArrayList<Node> nodes = new ArrayList<Node>();
		
		for(int i = 0; i < 10; i ++)
			nodes.add(new Node());
		
		nodes.clear();
		
		System.gc();
		
		while ( Node.getCounter() > 0);
		System.out.println("Alle Nodes gelöscht!");
	}
	
	public static void main(String[] args) {
		new NodeCounter();

	}
	
	static class Node {
		
		private static int counter;
		static {
			counter = 0;
		}
		
		Node() {
			counter ++;
		}
		
		protected void finalize() {
			counter --;
		}

		public static int getCounter() {
			return counter;
		}
		
		
	}

}
 
Hallo,

Wieso? Irgendwann spring er an. Nimm das:
jein ... bei solch einem Minibeispiel mag das sogar tatsächlich der Fall sein, aber
bei Java Anwendungen mit Heaps in der Größenordnung von mehreren hundert MB bzw. mehreren
GB (mit der 32-bit JVM von Sun kann man unter Win32 1.5 - 1.8 GB Heap erhalten, sofern man genug
Speicher hat ;-) ist das nicht mehr so gewiss ;-) Es gibt jedoch auch (exotische) JVMs die mehere hundert GB Heap vertragen:
http://dev2dev.bea.com/blog/hstahl/archive/2006/05/what_would_you.html ;-)

Gruß Tom
 
Ja, das stimmt! Aber was hat das für eine praktische Relevanz. Dann müssen wir auch über die verschiedenen GCs und deren Strategien diskutieren. Sicher ist eine Diskussion darüber akademisch interessant, aber viel zu aufwendig für die Fragestellung. Offensichtlich geht es doch nur um binäre Bäume. Bestimmt sollte nur sichergestellt werden, dass beim Löschen keine Referenz vergessen wird. Ein beliebter Fehler bei solchen Aufgaben. Ich habe das so verstanden, dass nur die Qualität der eigentlichen Implementierung zu prüfen ist.

Ansonsten finde ich die Diskussion prima, da immer ein paar nette Sachen auf den Tisch kommen.

Gruß

Jo
 
Zurück