Java:在 HttpSession 中保留对 ArrayList 的 SoftReference 有任何问题/负面影响吗?

标签 java httpsession soft-references

我的代码正在执行以下操作(仅作为示例,我指定 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/

相关文章:

Java:将文档转换为现有文档:合并?

java - PreparedStatements 和绩效

java - HttpSession 属性 : Why is the attribute not updated

Android:BitmapFactory.decodeStream OutOfMemoryException - SoftReference 是解决方案吗?

java - map 中软引用的用法?

java - 使用 native 或内置函数生成多个随机数

java - 如何在事务内将文档添加到 Firebase 集合?

java - 模拟 HTTPSession

java - 创建具有特定 session ID 的 session

java - SoftReference<String> 内存不足时未进行垃圾回收