Map 作为静态变量时关于内存的问题

KUkaKaaa 2019-03-19 03:30:39
比如说 有一个 静态变量map


public static Map<String,String> map = new HashMap();


然后我存入了大量的数据。

1. 将 map =null , 或者 map.clear() 的话,内存不会被GC 回收 , 那么 那些对象失去引用会不会被GC 回收。

2. 如果说 那些对象可以被回收, GC 后,这些内存会不会被重复利用,同样的再往map 里面插入一批数据,大小不超过 原map 的话,占用的内存会不会增加。

3. 如果类似的 清除数据, 增加数据,操作比较频繁的话(可能没来得及GC) , 那么占用的内存,在jvm 内存足够的情况下,会不会一直增加, 且增加了的内存,除非此类卸载,否则,这些内存无法被回收。
...全文
938 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
stacksoverflow 2019-03-19
  • 打赏
  • 举报
回复
先参考一下看看有没有用 https://bugs.openjdk.java.net/browse/JDK-8171306
stacksoverflow 2019-03-19
  • 打赏
  • 举报
回复
查了一下,Java的hashmap不会自动收缩. 但hashmap的扩容是根据元素个数,不是单个元素的大小。 你的问题是很大的单个元素放到hashmap里,所以应该和hashmap的扩容与收缩关系不大(扩容扩得是元素个数) 实际上hashmap里存的只是到对象的引用。 如果不是数组的话,对内存就是随机分配的,所以我才应该不涉及到重用的问题。 20M的数据是作为String来缓存? jvm7之前类信息和static变量存在perm区,jvm8开始static变量存在堆区,类信息放在物理内存。 20M的数据作为String的话,可能被放到常量池中了,对常量池的回收查一下,还是不回收。 看你的现象应该是被放到物理内存里了?
maradona1984 2019-03-19
  • 打赏
  • 举报
回复
1.会
2.这个问题要分两部分看,map=null,那map这个对象就会被回收,不存在重新利用一说,map.clear(),java中的hashmap并没有看到收缩的算法,之前申请的数组还是原来的长度,只是指向为null,所以栈内存还是原来大小,堆内存自然会回收,你再重新插入,栈内存不会增加,但堆内存会变化,跟原来相比是否增加,得看你插的对象大小
3.会增加,但不会一直增加,GC优先级高于你的普通操作的,到临界值自然会GC

俺水平有限,有错请指正
KUkaKaaa 2019-03-19
  • 打赏
  • 举报
回复
引用 1 楼 stacksoverflow 的回复:
问题1:会回收,确定不用了就会被GC回收,这应该是虚拟机考虑的问题。 问题2:map =null的话应该会被全部回收,map.clear()的话查一查hashmap的扩容与收缩。 好像hashmap是可以收缩的,收缩后空间就被回收。 讨论是否重复利用没有太大意义。 问题3:查一查hashmap的扩容与收缩。
静态变量的内存分配是基于类的吧, 如果这个类不销毁的话,分配给静态变量的内存也可以被回收吗 主要我现在碰到一个问题,所以才会有这些疑问。 有一个数据文件,大小为20M, 使用一个静态map 来做缓存这些数据。 文件更新的话,通过接口来来重新加载这个文件,先clear原有的数据。然后把新的数据放入这个静态map 。 但是测试的时候 每次调用接口,观察 linux top 命令下。该进程占用的内存会不断地增加。且不会往下降。 观察 jconsole 的使用对内存,会正常回落。 所以就有疑问,是不是对象被回收了, 但是分配给map 的内存,不会被回收。 那么下一次是插入数据是重新分配内存, 还是在原有内存上使用。
stacksoverflow 2019-03-19
  • 打赏
  • 举报
回复
问题1:会回收,确定不用了就会被GC回收,这应该是虚拟机考虑的问题。 问题2:map =null的话应该会被全部回收,map.clear()的话查一查hashmap的扩容与收缩。 好像hashmap是可以收缩的,收缩后空间就被回收。 讨论是否重复利用没有太大意义。 问题3:查一查hashmap的扩容与收缩。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧