WeakHashMap

此刻尽丝华 2014-03-21 12:20:48
WeakHashMap map = new WeakHashMap();
for (int i = 0 ; i < 10000 ; i ++)
{
map.put(new Integer(i) , new Integer(i));
}
System.gc();
System.out.println("isEmpty="+map.isEmpty()); // 1
System.out.println(map); // 2
System.out.println("size="+map.size()); // 3

由于垃圾回收的不确定性,多次运行上述代码
其间有出现这样的结果:
isEmpty=false
{}
size=0

但是2处代码始终输出{}

实在是不理解啊....
...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2014-03-22
  • 打赏
  • 举报
回复
WeakHashMap使用的是WeakReference. 当GC线程扫描时,发现WeakReference的对象就会直接将其回收,不管内存够不够。 SoftReference只内存不够时才会被回收。
此刻尽丝华 2014-03-22
  • 打赏
  • 举报
回复
引用 2 楼 wdcqrs 的回复:
解释的不正确,只有当内存紧张时,当gc时,未被引用的的表项就会被清除/
为什么map不为空,输出map的时候却什么都没有呢?
浪漫小和 2014-03-21
  • 打赏
  • 举报
回复
解释的不正确,只有当内存紧张时,当gc时,未被引用的的表项就会被清除/
浪漫小和 2014-03-21
  • 打赏
  • 举报
回复
weakhash map只有当内存紧张时gc才会去回收,你可以试图将堆值设置小点,在来测试.

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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