final Variablen und der GarbageCollector

  • Themenstarter Themenstarter anonymus2609
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
A

anonymus2609

Gast
Hallo zusammen,
ich hab leider keinen Eintrag zum Thema gefunden, der mir weiterhelfen konnte.
Mein Dozent ist der Meinung, dass final Variablen im Methodenkopf erst am Ende des gesamten Programm-Build vom GarbageCollecor "eingesammelt" werden.

folgendes Beispiel:

Code:
public void push(final E value){
    //... do somethng with value
}

So! Meiner Meinung nach wird die Variable value hier genauso behandelt, wie eine "normale" Variable.
Das bedeutet sie wird nach Beendigung der Methode push, wenn sie keine Referenzen mehr besitzt gelöscht.

Hat eventuell jemand Erfahrungen mit dem GarbageCollector und kann mir sagen, wer hier im Recht ist?
Ich habe leider keine genauen Spezifikationen dazu gefunden, jedoch wurde die Variante mit "final" in einigen Büchern als bestPractie Methode beschrieben.
 
Das lässt sich relativ einfach herausfinden.

Code:
public class JavaForumTest {

	public static void main(String[] args) throws Exception {

		bar(new Foo());
		gcMania();
		Thread.sleep(2000);

	}
	
	private static void bar(final Foo f) {
		f.doSomething();
	}
	
	private static void gcMania() {
		System.gc();
		System.gc();
		System.gc();
		System.gc();
		System.gc();
		System.gc();
	}

}

class Foo {
	
	@Override
	protected void finalize() throws Throwable {
		System.out.println("help, the GC is coming!");
	}
	
	public void doSomething() {
		System.out.println("*work*");
	}
	
}
Bei mir wird die Instanz immer vom GC aufgeräumt. Theoretisch muss das Programm jedoch nicht immer funktionieren, weil weder System.gc() noch finalize() garantierte Methoden sind. Habs mit der Sun JVM laufen.
 
Ich denke, du hast recht. Warum sollte Java eine Variable aufheben, die nicht mehr zugreifbar ist, final hin oder her?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben