关于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博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!