2

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

出于害怕原因的问题,即不会 java 堆空间异常和 RAM 节省。

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

谢谢!

4

2 回答 2

4

所有对象(包括数组)在 Java 中都是通过引用传递的。所以如果你将一个数组的同一个实例存储到多个HttpSessions中,就会在它们之间共享。数组的大小不能被修改,但是它的元素可以被修改——无论它们是原语还是引用,所以在高度并发的环境(如 Servlet)中必须小心。

您可能需要注意的另一个方面是 an 的所有属性都HttpSession 应该是可序列化的。

于 2011-07-06T08:13:14.483 回答
2

它将在所有会话中都是同一个对象,尽管我想不出很多理由来做这样的事情。我不确定你所说的无状态数组到底是什么意思,你的意思是不可变的吗?当涉及到线程安全时,如果它不是不可变的,则需要非常谨慎地处理跨会话共享的此类对象。

于 2011-07-05T15:45:34.000 回答