【问题标题】:Measuring the Size of HttpSession object测量 HttpSession 对象的大小
【发布时间】:2010-12-10 15:48:14
【问题描述】:

除了以编程方式测量存储在会话中的每种数据类型(每个对象由其组成)的大小之外,是否有一种干净且简单的方法来测量它?

【问题讨论】:

    标签: java tomcat httpsession


    【解决方案1】:

    有一个 SessionSize 类 here 具有返回传递给它的 HttpSession 对象大小的函数,它是 Java Web Parts 库的一部分。

    【讨论】:

      【解决方案2】:

      会话内容必须是可序列化的。所以序列化它并查看生成的字节数组的大小。

      它不等于内存大小,但可以作为它的粗略表示。

      附:请注意,临时字段(如果有)将被排除在外。

      【讨论】:

      • 会话属性应该是可序列化的(如“这样做是个好习惯”);但他们没有必须
      • 会话序列化是一种通过将空闲会话保存到磁盘来节省内存的有效方法。如果 Erlanged 的​​应用程序具有不可序列化的会话,则首先要修复它,而不是测量单个会话的大小。
      • 回复:必须/应该:容器必须接受 Serializable 对象,并且可以接受其他对象。它也可能在任何不可序列化的对象上抛出 IllegalArgumentException。我想说 Serializable 几乎是必须的,以我们告诉你的方式。
      【解决方案3】:

      MessAdmin 允许您计算 HttpSession 的大小,尽管目前尚不清楚它是如何calculates the size of transient objects

      看起来,获取 HttpSession 对象的近似大小在生产中是徒劳的,而对于受控环境,可能会获得更准确的大小。

      需要注意的一点是,由于字符编码的变化,序列化会话对象的大小必然会不准确 - Java 中的字符串以 UTF-16 格式存储,而输出流可能采用不同的编码。关于为什么在 Java 中计算对象的大小是一个问题的更多详细信息,可以在 JavaWorld article 中找到。

      【讨论】:

      • 我在一个使用 struts-2 框架和 spring 3.4 作为对象容器的 Web 应用程序中使用它,我的会话大小始终为 -1,这意味着它无法计算会话中对象的大小。
      • @Alireza Fattahi 我也遇到过同样的问题。最终我发现除了 MessAdmin-Core 和 MessAdmin-AutoProb 之外,您还需要使用 MessAdmin-SizeOf 插件来获取会话属性的大小。您可能还想添加 MessAdmin-Serializable。
      猜你喜欢
      • 2012-04-17
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      相关资源
      最近更新 更多