Hey,
ich hab eine Frage zum Verhalten des GC was den String Constant Pool angeht:
Werden enstprechende Strings auch vom GC gelöscht?
d.h. wenn ich sowas hab:
Rein vom "Gefühl" her würde ich sagen ja, denn der Pool ist ja nur ne Sammlung von Referenzen,
die Objekte liegen ja eig auch ganz normal auf dem Heap. So hab ich das zumindest irgendwo gelesen. Ich hoffe das stimmt? Oder ist der Constant Pool ein eigener Bereich im Speicher mit den String-Objekten und nicht Teil des Heaps?
Wie auch immer - vllt behält er diese String-Objekte ja im Heap weil man sie vllt noch braucht.
Ich denk da an sowas wie:
Kann die JVM oder der Compiler sowas eig. erkennen, dass es hier u.U. besser wär beide Objekte im Speicher zu behalten, auch wenn sie kurzfristig vllt nicht referenziert werden, weil man sie eh demnächst wieder brauchen wird ???:L
Thank you
ich hab eine Frage zum Verhalten des GC was den String Constant Pool angeht:
Werden enstprechende Strings auch vom GC gelöscht?
d.h. wenn ich sowas hab:
Java:
String s = "whatever";
s = null;
Rein vom "Gefühl" her würde ich sagen ja, denn der Pool ist ja nur ne Sammlung von Referenzen,
die Objekte liegen ja eig auch ganz normal auf dem Heap. So hab ich das zumindest irgendwo gelesen. Ich hoffe das stimmt? Oder ist der Constant Pool ein eigener Bereich im Speicher mit den String-Objekten und nicht Teil des Heaps?
Wie auch immer - vllt behält er diese String-Objekte ja im Heap weil man sie vllt noch braucht.
Ich denk da an sowas wie:
Java:
int i = 0;
while(true){
if(i == 0){
s = "whatever"; i = 1;
}
else{
s = "foo"; i = 0;
}
// evtl sleep
}
Kann die JVM oder der Compiler sowas eig. erkennen, dass es hier u.U. besser wär beide Objekte im Speicher zu behalten, auch wenn sie kurzfristig vllt nicht referenziert werden, weil man sie eh demnächst wieder brauchen wird ???:L
Thank you
Zuletzt bearbeitet: