我在服务器应用程序中使用HttpSession。并为会话设置属性。我在下一个问题:会话集的属性如何 - 通过引用或值。
担心的原因是不会有java堆空间异常和RAM节省。
例如:如果我将创建无状态array1
并将其设置为不同会话的属性。在这种情况下,所有会话都将使用array1
作为“singleton”实例,或者可能不是
谢谢!
答案 0 :(得分:4)
所有对象(包括数组)都由Java中的 reference 传递。因此,如果将相同的数组实例存储到多个HttpSession
中,它们将在它们之间共享。无法修改数组的大小,但是它的元素可以是 - 无论它们是基元还是引用,因此在高度并发的环境(如Servlet)中必须小心。
您可能需要考虑的另一个方面是HttpSession
的所有属性都应可序列化。
答案 1 :(得分:2)
它将成为所有会话中的同一个对象,尽管我没有太多理由想要做这样的事情。我不确定无状态数组究竟是什么意思,你的意思是不可变吗?如果线程安全不是不可变的话,那么在线程安全方面需要非常谨慎地处理这些跨会话共享的对象。