只是试图从GC的角度理解一些东西
public Set<Something> returnFromDb(String id) {
LookupService service = fromSomewhere();
Map<String,Object> where = new WeakHashMap<>() {}
where.put("id",id);
return service.doLookupByKVPair(where); // where doesn't need to be serializable
}
据我所知,一旦此方法调用离开堆栈,无论使用where
还是HashMap
,都没有对WeakHashMap
的引用-但是由于弱引用是弱可及的,这不是GCd更快吗?但是,如果方法调用离开了堆栈,那么无论如何都没有可访问的引用。
[我猜我真正的问题是-“将在这里使用WeakHashMap <>实际上很重要”-我认为这是“否,因为影响微不足道”-但第二个答案不会损害我的知识: )
谢谢,
[当您使用where.put("id",id);
之类的语句时,您会将值与从文字创建的String
实例相关联,该实例由包含该文字的代码永久引用。因此,关联的弱语义是没有意义的,只要代码是可访问的,则此特定键对象将永远不会被垃圾回收。