HttpSession按引用或值存储属性?

时间:2011-07-05 15:38:15

标签: java servlets httpsession

我在服务器应用程序中使用HttpSession。并为会话设置属性。我在下一个问题:会话集的属性如何 - 通过引用或值。

担心的原因是不会有java堆空间异常和RAM节省。

例如:如果我将创建无状态array1并将其设置为不同会话的属性。在这种情况下,所有会话都将使用array1作为“singleton”实例,或者可能不是

谢谢!

2 个答案:

答案 0 :(得分:4)

所有对象(包括数组)都由Java中的 reference 传递。因此,如果将相同的数组实例存储到多个HttpSession中,它们将在它们之间共享。无法修改数组的大小,但是它的元素可以是 - 无论它们是基元还是引用,因此在高度并发的环境(如Servlet)中必须小心。

您可能需要考虑的另一个方面是HttpSession 的所有属性都应可序列化。

答案 1 :(得分:2)

它将成为所有会话中的同一个对象,尽管我没有太多理由想要做这样的事情。我不确定无状态数组究竟是什么意思,你的意思是不可变吗?如果线程安全不是不可变的话,那么在线程安全方面需要非常谨慎地处理这些跨会话共享的对象。