gpt4 book ai didi

Java 垃圾收集和 null

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:18 25 4
gpt4 key购买 nike

我有以下代码:

 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)小于上述测试用例。在这两种情况下,对象都会从内存中删除。但是为什么这些值不同。

最佳答案

list = null; 取消任何引用将自动导致垃圾收集。当您注释此行时,引用列表仍然处于 Activity 状态,那么即使您调用System.gc(),它也不会被垃圾收集。

当显式调用gc()时,已经无效或超出范围的引用只会被垃圾收集。

关于Java 垃圾收集和 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10040214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com