Øsession内存使用策略:
® 应用程序和会话作用域内的所有对象都将在服务器进程中占有内存。
® 应用程序作用域对象占用内存数:你产生的全局对象数*对象大小。
® 计算session作用域中占用内存的方法:
会话作用域内的对象数目取决于当前会话的数目,所以除了每个对象的大小外,你
还需要知道当前有多少个用户,以及一个会话将持续多长时间。
例:以购物车为例,购物车内有3件产品,
i) 单个用户购物车对象占用服务器内存量
3*8+8=32个字节
3件产品乘以每一件产品对象的大小,加8是因为保存产品的集合对象引
用也需要一些额外的开销
ii) 假设该网站每小时有10位用户来购物,会话默认有效期是30分钟,所以共有10个活动的用户和10个已经不再活动得到会话,总共20个会话。内存占用量:
20 * 56 =1120个字节
56个字节是每个会话所需要的字节。32+24
iii) 如果每小时2000个用户,内存占用量
4000 * 56 = 220k字节
iv) 以上计算,只是按对象引用来计算一个对象引用的大小为8字节。如果会话中保存一些大对象,例如大的POJO,假设每个对象10KB,
那么4000个会话就占用40M内存空间(有点大噢)。
® 控制服务器内存提示:
i) 会话中知保存真正需要保存的对象
ii) 会话有效期设成比默认值短
iii) 提供一种显式地结束会话的方法,如“注销”功能,或当某件事完成后,使会话失效,可以使用HttpSession invalidate()方法,当某个会话失效时,可以使得所有的对象被回收。
注:Java中一个对象引用的大小为8字节