面试题答案
一键面试WeakHashMap在缓存场景应用的基本原理
WeakHashMap中的键是弱引用。当除了WeakHashMap内部的引用外,键对象没有其他强引用时,在下一次垃圾回收时,键及其对应的值会被回收。这样在缓存场景中,如果缓存数据不再被其他地方强引用,就会自动从缓存中移除,从而避免内存泄漏,同时在内存紧张时能释放缓存占用的空间。
与普通HashMap的区别
- 键的引用类型:
- HashMap的键是强引用,只要键对象被HashMap引用且程序中存在对该键的强引用,键值对就不会被垃圾回收。
- WeakHashMap的键是弱引用,当键对象没有其他强引用时,会被垃圾回收。
- 内存管理:
- HashMap不会自动释放不再使用的键值对内存,需要手动移除。
- WeakHashMap会在键失去强引用时自动释放键值对内存。
- 遍历行为:
- HashMap在遍历过程中,如果结构发生变化(如添加或删除元素),会抛出ConcurrentModificationException。
- WeakHashMap在遍历过程中,当某个键被垃圾回收,在后续操作中会跳过该键值对,不会抛出ConcurrentModificationException。
适用于缓存场景的原因
- 自动内存回收:能自动释放不再被使用的缓存数据,有效避免内存泄漏,在内存紧张时可以及时释放缓存占用的内存空间,提高系统的稳定性和性能。
- 减少手动管理开销:无需开发者手动跟踪和移除不再使用的缓存数据,降低了代码复杂度和维护成本。