【Java-GC】集合Collection的clear()和GC垃圾回收测验

转自CSDN博客。修复引用网易图片引起的图片丢失。

个人理解:

虽然不做任何操作,GC会自动回收 ArrayList 内部的对象和 ArrayList 自己本身占用的空间,但GC的时间无法确定,可能在程序运行结束后(对于要一直运行的服务肯定无法接受),也可能由JVM按照某种调度算法定时回收。
但个人认为,程序员主动的使用 list = null,map = null 等赋予 null 值 的方法标记自己不再使用的对象,更有利于GC回收。毕竟再智能的GC算法,也比不上创造这些Java对象的程序员。

 

原文如下:

一、一个简单的例子

代码图

代码运行结果图:

图1
运行结果图1

运行结果图1为上代码图的运行结果,说明在创建了一个大小为100W的列表后,内存分配了一定大小的空间,在clear() 之后,调用gc()垃圾清除后得到创建列表以后的内存大小。

如果将代码中第11行改为

ArrayList<String> list= new ArrayList<String>();

后将得到运行结果图2.说明在创建了一个默认大小的列表后,往里面添加数据时自动扩充了列表的大小,因为列表扩充时成倍扩充的原理,最后调用clear()和gc()后的结果内存要比图1中少(可能此时列表的SIZE要大于100W).

图2
运行结果图2


如果将代码中第32行中的list.clear();改为list=null; 将会得到以下结果:

图3
运行结果图3

或将第32行删掉后也会得到上述结果.

说明赋值NULL后不仅列表中的对象变成了垃圾,为列表分配的空间也会回收,什么都不做与赋值NULL一样,说明直到程序结束也用不上列表list了,它自然就成为垃圾了.clear()只是清除了对象的引用,使那些对象成为垃圾。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值