【发布时间】:2011-07-06 16:13:14
【问题描述】:
我在我的服务器应用程序中使用 HttpSession。并为会话设置属性。接下来我的问题:会话的属性如何设置 - 通过引用或值。
担心不会java堆空间异常和RAM节省的原因。
例如:如果我将创建无状态 array1 并将其设置为不同会话的属性。在这种情况下,所有会话都将使用 array1 作为“单例”实例,或者可能不是
谢谢!
【问题讨论】:
标签: java servlets httpsession
我在我的服务器应用程序中使用 HttpSession。并为会话设置属性。接下来我的问题:会话的属性如何设置 - 通过引用或值。
担心不会java堆空间异常和RAM节省的原因。
例如:如果我将创建无状态 array1 并将其设置为不同会话的属性。在这种情况下,所有会话都将使用 array1 作为“单例”实例,或者可能不是
谢谢!
【问题讨论】:
标签: java servlets httpsession
所有对象(包括数组)在 Java 中都是由 reference 传递的。因此,如果将数组的同一个实例存储到多个HttpSessions 中,它将在它们之间共享。数组的大小不能被修改,但是它的元素可以被修改——无论它们是原语还是引用,所以在高度并发的环境(如 Servlet)中必须小心。
您可能需要注意的另一个方面是HttpSession 的所有属性应该是可序列化的。
【讨论】:
它将在所有会话中都是同一个对象,尽管我想不出很多理由来做这样的事情。我不确定你所说的无状态数组到底是什么意思,你的意思是不可变的吗?这种跨会话共享的对象如果不是不可变的,则在线程安全方面需要格外小心。
【讨论】: