我的代码正在执行以下操作(仅作为示例,我指定java.lang.ref.SoftReference的程序包路径的原因是要注意,这不是我自己的实现:-):

...
List<String> someData = new ArrayList<String>();
someData.add("Value1");
someData.add("Value2");
...
java.lang.ref.SoftReference softRef = new SoftReference(someData);
...
HttpSession session = request.getSession(true);
session.setAttribute("mySoftRefData", softRef);
...


然后:

...
java.lang.ref.SoftReference softRef = session.getAttribute("mySoftRefData");
if (softRef != null && softRef.get() != null) {
   List<String> someData = (List<String>)softRef.get();
   // do something with it.
}
...


有什么缺点吗?我看不到哪?谢谢!

最佳答案

明显的缺点是该列表可能会意外地消失。由于会话无论如何在过期后都是垃圾回收,因此我真的没有看到SoftReference的用例。如果列表很大(至少足够足以使用SoftReference证明),我宁愿建议使用其他存储(数据库,临时文件)。

10-04 12:22