Hey,
aus gegebenem Anlass (Thread eines anderen Users) bin ich mal wieder dazu gekommen mich mit dem GC zu beschäftigen. Dabei ist mir aufgefallen dass noch viele Fragezeichen über meinem Kopf schweben. Siehe Bild:
So, nach etwas googlen bin ich noch verwirrter, jetzt versteh ich gar nix mehr und suche Hilfe bei euch!
Erstmal: Der GC bereinigt nur den Heap, nicht den Stack, nicht wahr?
Frage: Was genau liegt auf dem Heap, was auf dem Stack? Das ganze googlen hat mich da total irritiert. Ich dachte bisher der Stack speichert primitive Daten, der Heap Objekte. Wobei die Frage ist was ist mit primitiven Instanzvariablen von Objekten Oo.
Jetzt hab ich aber gelesen der Stack speichert lokale Variablen. Hä? Was bleibt dann für den Heap noch übrig, jede Instanz wird irgendwo lokal erstellt - okay mal die statischen Variablen ausgenommen.
Der Stack bereinigt sich anscheinend selber, sobald der enstprechende Code-Block beendet wird, d.h. lokale Variablen werden aufgelöst. Aber nur die Variablen, also die Referenz, aber nicht das Objekt selber oder? Das liegt auf dem Heap und wird vom GC geschnappt?
Und woher weiss der GC ob sowas noch gebraucht wird? Man sagt sobald etwas nicht mehr referenziert wird. Aber:
Dieses Objekt wird nicht referenziert im Code - der GC beendet den Thread ja trotzdem nicht, auch wenn die Methode verlassen wurde die dieses Objekt erstellt hat. Was wird da alles gecheckt bei einem Objekt, bevor es zerstört wird?
Oder hat irgendwie jeder Thread seinen eigenen Stack/Heap??
Das ist alles so verwirrend :autsch:
Also:
1) Was beinhaltet der Stack?
2) Was beinhaltet der Heap?
3) Gibt es von denen vllt mehrere bei mehreren Threads?
3) Was bereinigt der GC?
4) Woher weiss er, was er zerstören soll und was nicht? Nur an der Referenzierung kann es nicht liegen, s.o.
Ich danke vielmals!
aus gegebenem Anlass (Thread eines anderen Users) bin ich mal wieder dazu gekommen mich mit dem GC zu beschäftigen. Dabei ist mir aufgefallen dass noch viele Fragezeichen über meinem Kopf schweben. Siehe Bild:
Erstmal: Der GC bereinigt nur den Heap, nicht den Stack, nicht wahr?
Frage: Was genau liegt auf dem Heap, was auf dem Stack? Das ganze googlen hat mich da total irritiert. Ich dachte bisher der Stack speichert primitive Daten, der Heap Objekte. Wobei die Frage ist was ist mit primitiven Instanzvariablen von Objekten Oo.
Jetzt hab ich aber gelesen der Stack speichert lokale Variablen. Hä? Was bleibt dann für den Heap noch übrig, jede Instanz wird irgendwo lokal erstellt - okay mal die statischen Variablen ausgenommen.
Der Stack bereinigt sich anscheinend selber, sobald der enstprechende Code-Block beendet wird, d.h. lokale Variablen werden aufgelöst. Aber nur die Variablen, also die Referenz, aber nicht das Objekt selber oder? Das liegt auf dem Heap und wird vom GC geschnappt?
Und woher weiss der GC ob sowas noch gebraucht wird? Man sagt sobald etwas nicht mehr referenziert wird. Aber:
Java:
new Thread(){
public void run(){
while(true){...}
}
}.start();
Dieses Objekt wird nicht referenziert im Code - der GC beendet den Thread ja trotzdem nicht, auch wenn die Methode verlassen wurde die dieses Objekt erstellt hat. Was wird da alles gecheckt bei einem Objekt, bevor es zerstört wird?
Oder hat irgendwie jeder Thread seinen eigenen Stack/Heap??
Das ist alles so verwirrend :autsch:
Also:
1) Was beinhaltet der Stack?
2) Was beinhaltet der Heap?
3) Gibt es von denen vllt mehrere bei mehreren Threads?
3) Was bereinigt der GC?
4) Woher weiss er, was er zerstören soll und was nicht? Nur an der Referenzierung kann es nicht liegen, s.o.
Ich danke vielmals!