【问题标题】:HttpSession stores attribute by reference or value?HttpSession 通过引用或值存储属性?
【发布时间】:2011-07-06 16:13:14
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: java servlets httpsession


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      它将在所有会话中都是同一个对象,尽管我想不出很多理由来做这样的事情。我不确定你所说的无状态数组到底是什么意思,你的意思是不可变的吗?这种跨会话共享的对象如果不是不可变的,则在线程安全方面需要格外小心。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-15
        • 2011-06-23
        • 2020-10-16
        • 1970-01-01
        • 2018-04-02
        • 2012-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多