首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Java WeakHashMap

作为一个java开发者肯定都知道且使用HashMap,但估计大部分人都不太知道WeakHashMap。从类定义上来看,它和普通的HashMap一样,继承了AbstractMap类和实现了Map接口,也就是说它有着与HashMap差不多的功能。那么既然jdk已经提供了HashMap,为什么还要再提供一个WeakHashMap呢? 黑格尔曾经说过,存在必合理,接下来我们来看下为什么有WeakHashMap。   先来想象一下你因为某种需求需要一个Cache,你肯定会面临一个问题,就是所有数据不可能都放到Cache里,或者放到Cache里性价比太低了。这个时候你可能很快就想到了各种Cache数据过期策略,目前也有一些优秀的包提供了功能丰富的Cache,比如Google的Guava Cache,它支持数据定期过期、LRU、LFU等策略,但它任然有可能会导致有用的数据被淘汰,没用的数据迟迟不淘汰(如果策略使用得当的情况下这都是小概率事件)。   如果我现在说有种机制,可以让你Cache里不用的key数据自动清理掉,用的还留着,没有误杀也没有漏杀你信不信!没错WeakHashMap就是能实现这种功能的东西,这也是它和普通的HashMap不同的地方——它有自清理的机制。   如果让你实现一种自清理的HashMap,你怎么做? 我的做法肯定是想办法先知道某个Key肯定没有在用了,然后清理到HashMap中对应的K-V。在JVM里一个对象没用了是指没有任何其他有用对象直接或者间接执行它,具体点就是在GC过程中它是GCRoots不可达的。 Jvm提供了一种机制能让我们感知到一个对象是否已经变成了垃圾对象,这就是WeakReference,不了解WeakReference的可以看下我上一篇介绍博客Java弱引用(WeakReferences)。   某个WeakReference对象所指向的对象如果被判定为垃圾对象,Jvm会将该WeakReference对象放到一个ReferenceQueue里,我们只要看下这个Queue里的内容就知道某个对象还有没有用了。 WeakHashMap就是这么做的,所以这里的Weak是指WeakReference。接下来让我们看下它的代码,看它具体是怎么实现的。

02

3D快捷键

快捷键   全局选项:   Alt + 鼠标滚轮 上/下使窗口 透明/不透明   程序切换:  Alt + Tab:在当前工作台中切换窗口  Ctrl + Alt + Tab:在所有工作台中切换窗口  窗口排列(编排并显示所有窗口):上/下  左下角(关键区域):所有工作台(点击一个窗口缩放它到前台)  右上角(关键区域):当前工作台  显示桌面(看当前立体面的桌面):  右下角(关键区域):开/关  立方体旋转:  Ctrl + Alt + 左/右方向键:立体地切换桌面  Ctrl + Shift + Alt + 左/右方向键:把活动窗口移到左/右工作台  Ctrl + Alt + 鼠标左键并拖曳:手动旋转立方体  缩放:  Win + 鼠标右键:缩放一次  Win + 鼠标滚轮 上/下:手动缩放大/小  移动窗口:  Alt + 鼠标左键并拖曳:移动窗口  Ctrl + Shift + 鼠标左键:迅速移动窗口(会粘住边框)  调整窗口大小:  Alt + 鼠标中键  水波效果:  Ctrl + Win + 移动鼠标:关标在水上移动(默认无效)  Shift + F9:雨点降落在你的屏幕上  模糊效果:  在透明窗口下添加一些模糊(会使计算机变慢)  动画效果:  当创建或者关闭窗口时使用动画效果(对菜单也有效,不过你要选择“未知”,只选“菜单”没用)  反色效果:  Win + m:屏幕反色  Win + n:当前窗口反色  反射效果:  给装饰添加一些纹理(当透明时大多数可见)  屏幕截图:  Win + 鼠标左键并拖曳:将所选区域截图(图片保存在桌面)  焦点轨迹效果:  更旧的窗口更加透明  摆动效果:  使窗口丶菜单等像棉花糖  亮度和饱和度:  Ctrl + 鼠标滚轮 上/下:增加/减少 饱和度(对桌面也有效)  Shfit + 鼠标滚轮 上/下:增加/减少 亮度(对桌面也有效)  窗口对齐:  Win + 小键盘1...9:在屏幕中快速对齐一个窗口(1=左下,2=中下,3=右下......)  动态效果减速:Shift+F10

03
领券