关于ArrayList与vector存储问题

今天手撸项目的时候,惊然发现一个问题

复制代码
全局变量:
static Vector<ArrayList> vector=new Vector<>(0);

某函数下:
vector.add(nearby_poi);
            System.out.println(vector.get(vector.size()-1).get(4));
            Thread.sleep(10000);
            nearby_poi.clear();
这样是可以完美输出的!

然而,当我改变了一下代码:
vector.add(nearby_poi);
            nearby_poi.clear();
            System.out.println(vector.get(vector.size()-1).get(4));
            Thread.sleep(10000);
然后这段傻逼代码给爷报错。。。。。
                
复制代码

 

在我的细细思索之下,认为,这俩逼和数组有些不同点,会不会是他们一个存储的地址,一个存储的是值捏,妈的,我一个逼大二学生凭什么知道哇,

所以哥们直接他妈的去ci si de ne上find find,一搜之下果然不出哥们所料,原来是他妈的这样:

在ArrayList中底层数组是Object类型,数组中存储的并不是数据本身,而是数据的引用,那么现在在看clear的方法

 

方法中将数组元素清空设置为null,即清除了对所有元素的引用,那么系统在gc的时候会将所有的元素清除,释放元素所占用的内存空间。但是此时并没有释放系统分配给elementData数组的空间。

拿到解决方案哥们欣喜若狂,直呼问题迎刃而解,如宝剑吹啥玩意断发,真实一泄如注,一心一意,一生一世,一二三四。

问题不大!

但是!问题来了,

问题是找到了,这该怎么去解决呢,哥们挠头,不用list也不行,现在是8:38,让哥们去想想解决办法。。。

只因你太美,哥们找到解决方法了,出在同一篇文章,现在是8:42,膜拜大佬!

方法中将数组元素清空设置为null,即清除了对所有元素的引用,那么系统在gc的时候会将所有的元素清除,释放元素所占用的内存空间。但是此时并没有释放系统分配给elementData数组的空间。

最后附上大佬文章:(21条消息) java集合ArrayList中clear方法内存释放分析_arraylist clear_天河~的博客-CSDN博客

 

posted @   子过杨梅  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示