Understanding how the Garbage Collector works in Java 7 when using Maps and Vectors -



Understanding how the Garbage Collector works in Java 7 when using Maps and Vectors -

i have been reading stuffs on how garbage collector works in java, i'm not sure correctly understand doing in reality. i've been creating ugly program...

the thing is:

you nail add together button , create treemap of 80k elements added vector

you nail remove button, , remove lastly element in vector

public class modeltester { public static date gettoday(){ calendar cal = calendar.getinstance(); homecoming getdate(cal.get(calendar.year),cal.get(calendar.month),cal.get(calendar.day_of_month),0,0); } public static date getdate(integer year, integer month, integer day, integer hour, integer minute){ calendar calendar = calendar.getinstance(); calendar.set(calendar.year, year); calendar.set(calendar.month, month); calendar.set(calendar.day_of_month, day); calendar.set(calendar.hour_of_day, hour); calendar.set(calendar.minute, minute); calendar.set(calendar.second, 0); calendar.set(calendar.millisecond, 0); homecoming calendar.gettime(); } public static void main(string[] args) { jframe frame = new jframe(); frame.addwindowlistener(new windowadapter() { @override public void windowclosing(windowevent e) { system.exit(0); } }); final vector<treemap<date, double>> v = new vector<treemap<date, double>>(); jpanel panel = new jpanel(new flowlayout()); jbutton addbutton = new jbutton("add data"); jbutton removebutton = new jbutton("remove data"); jbutton rungcbutton = new jbutton("run garbage collector"); panel.add(addbutton); panel.add(removebutton); panel.add(rungcbutton); frame.getcontentpane().add(panel); addbutton.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { treemap<date, double> info = new treemap<date, double>(); (int =0; < 80000; i++){ data.put(new date(gettoday().gettime() - i), new double(i)); } v.add(data); system.out.println("adding info => vector size = " + v.size()); } }); removebutton.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { if(v.size() !=0){ v.remove(v.size()-1); } system.out.println("removing info => vector size = " + v.size()); } }); rungcbutton.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { system.out.println("yeah, collecting garbage"); system.gc(); } }); frame.setsize(150,150); frame.setvisible(true); } }

after adding few info , removing everything, ending memory consumption.

how come programme still utilize amount of memory given don't have anymore references on maps when removing them vector ?

thanks help

edit after using visual vm

as laune has said, memory won't reclaimed operating system. jvm reserves minimum amount of memory heap @ startup (configured xms setting) , grows necessary maximum (the xmx setting). never release memory operating system.

to see how much of heap space beingness used, there various tools available. visualvm 1 of best free ones, show heap space usage, , give live histogram showing amount of memory used objects of each class.

java vector map garbage-collection

Comments