我的代码正在执行以下操作(仅作为示例,我指定 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.
}
...
有什么缺点吗?我没有看到哪个?谢谢!
最佳答案
明显的缺点是列表可能会意外消失。由于 session 无论如何都会在过期后被垃圾收集,因此我并没有真正看到 SoftReference 的用例。如果列表变得相当大(至少足以证明使用 SoftReference 是合理的),我宁愿建议使用不同的存储(数据库、临时文件)。
关于Java:在 HttpSession 中保留对 ArrayList 的 SoftReference 有任何问题/负面影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458979/