我有以下一段代码:
List<String> list = new ArrayList<String>();
// WeakReference<List> wr = new WeakReference<List>(list);
System.out.println(" before tot memory... " + Runtime.getRuntime().totalMemory());
System.out.println(" before free memory... " + Runtime.getRuntime().freeMemory());
for(int i =0; i<100; i++)
list.add(new String("hello"));
//System.gc();
list = null; //forcefully end its life expectancy
System.out.println(" after tot memory... " + Runtime.getRuntime().totalMemory());
System.out.println(" after free memory... " + Runtime.getRuntime().freeMemory());
System.out.println(" after memory used ... " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));
// System.out.println(" weak reference " + wr.get());
当我运行上面的代码时,我可以看到可用内存是 361064(在我的系统中,但是这个值可能会有所不同)
但是当我使用 System.gc() 和注释 list=null 运行上面的代码时,我可以看到我的可用内存即将到来(在这种情况下为 160944)小于上面的测试用例。在这两种情况下,对象都会从内存中删除。但是为什么这些值不同。