[Java-应用程序中使用的HashMap和WeakHashMap引用

问题描述 投票:0回答:1

只是试图从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 <>实际上很重要”-我认为这是“否,因为影响微不足道”-但第二个答案不会损害我的知识: )

谢谢,

java-8 garbage-collection weak-references weakhashmap
1个回答
0
投票

[当您使用where.put("id",id);之类的语句时,您会将值与从文字创建的String实例相关联,该实例由包含该文字的代码永久引用。因此,关联的弱语义是没有意义的,只要代码是可访问的,则此特定键对象将永远不会被垃圾回收。

© www.soinside.com 2019 - 2024. All rights reserved.