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