B
Bazinga
Gast
Ich möchte zu einem bestimmten Zeitpunkt in meinem Programm den Speicher des Attributs _data wieder freigeben.
Dies soll durch den Aufruf einer der resetData-Methoden erreicht werden.
1. Wenn ich mir in meiner Jboss-Konsole die Memory-Pools ansehe, bleibt der Tenured Gen unverändert. Warum wird der Speicher nicht freigegeben? Muss ich noch ein System.gc() hinterherschicken?
2. Welche Methode zum Reset ist am sinnvollsten? Haben alle den gleichen Effekt? Was sind die Unterschiede im Bezug auf den Speicher?
3. Werden die HashMap-Objekte auch alle vom Speicher gelöscht oder müssen diese vorher noch per remove() geleert werden?
4. Fallen Euch noch andere Punkte an dem Code auf in Bezug auf Speicheroptimiertung, die man verbessern sollte?
Dies soll durch den Aufruf einer der resetData-Methoden erreicht werden.
Java:
public Vector _data = new Vector();
public void fillData() {
for (int i = 0; i < 50000; i++) {
HashMap map = new HashMap();
map.put("id", i);
_data.add(map);
}
}
public void resetData1(){
_data.removeAllElements();
}
public void resetData2(){
_data.clear();
}
public void resetData3(){
_data = null;
}
public void resetData4(){
_data = new Vector();
}
1. Wenn ich mir in meiner Jboss-Konsole die Memory-Pools ansehe, bleibt der Tenured Gen unverändert. Warum wird der Speicher nicht freigegeben? Muss ich noch ein System.gc() hinterherschicken?
2. Welche Methode zum Reset ist am sinnvollsten? Haben alle den gleichen Effekt? Was sind die Unterschiede im Bezug auf den Speicher?
3. Werden die HashMap-Objekte auch alle vom Speicher gelöscht oder müssen diese vorher noch per remove() geleert werden?
4. Fallen Euch noch andere Punkte an dem Code auf in Bezug auf Speicheroptimiertung, die man verbessern sollte?