2009-10-27 17 views
12

除了以編程方式測量存儲在會話中的每種數據類型的大小(每個對象由哪個組成)的大小之外,是否有一種乾淨而簡單的方法來測量它?測量HttpSession對象的大小

回答

2

有一個SessionSize類here有一個函數返回傳遞給它的HttpSession對象的大小,Java Web Parts庫的一部分。

1

會話內容必須是可串行化的。所以序列化它並查看生成的字節數組的大小。

它不等於內存大小,但可以用作粗略表示。

P.S.請注意,瞬時字段(如果有的話)將被排除。

+0

會話屬性**應**可序列化(如「這是一個很好的做法」);但他們不**有**。 – ChssPly76 2009-10-27 21:33:12

+1

會話序列化是通過將空閒會話保存到磁盤來節省內存的有效方法。如果Erlanged具有不可序列化會話的應用程序,那麼首先要修復而不是測量各個會話的大小。 – 2009-10-28 00:18:45

+1

Re:must/should:container必須接受Serializable對象,並且可以接受別人。它也可以在任何不可序列化的類上拋出IllegalArgumentException。我會說Serializable幾乎必須以WE-TOLD-YOU-SO的方式。 – 2009-10-28 00:21:01

6

MessAdmin允許你計算HttpSession的大小,儘管目前還不清楚它如何calculates the size of transient objects

看起來,獲得HttpSession對象的近似大小是生產中無用的練習,並且可能會爲受控環境獲得更精確的大小。

需要注意的一件事是,由於字符編碼的變化,序列化會話對象的大小被限制爲不準確 - Java中的字符串以UTF-16格式存儲,而輸出流可能採用不同的編碼。有關計算Java中對象大小的更多細節是一個問題,可以在這個JavaWorld article中找到。

+0

我正在使用struts-2框架和彈簧3.4作爲對象容器的Web應用程序中,我會話大小總是-1,這意味着它無法計算會話中的對象的大小。 – 2013-11-23 11:02:34

+0

@Alireza Fattahi我一直在努力解決同一個問題。最後,我發現除MessAdmin-Core和MessAdmin-AutoProb之外,您還需要使用MessAdmin-SizeOf插件才能獲得會話屬性的大小。您也可以添加MessAdmin-Serializable。 – magicbacon 2015-04-30 16:39:50