Servlet会话属性大小和生命周期

时间:2012-03-05 20:51:12

标签: java session servlets

1)应该附加到会话的对象的可接受大小范围是多少?如果我附加一个可以是5k的对象,并且在任何给定时间我有10k个有效会话,那就是50MB的内存,这对我来说是可以接受的。这是解决问题的有效方法,还是存在其他重大问题?

2)这可能是一个愚蠢的问题,但是如果我将一个对象附加到具有2周生命周期的会话中,我是否可以在会话的整个持续时间内访问该属性,就好像它在内存中一样?

3)是否有任何理由不始终将会话信息保存到数据库?

2 个答案:

答案 0 :(得分:3)

  1. 可接受的大小取决于您的使用案例和并发会话数。如果你的会话持续了两周,那么可以想象你可以有很多并发会话,但是如果10k是你的最终防范,那么5k会话对象应该没有问题(正如你的计算所示)。

  2. 只要您有对会话对象的引用(或能够获得此类引用),那么数据将在会话中保留。请记住,您的会话对象必须是可序列化的。

  3. 出于性能原因,您可能不希望将所有会话数据持久保存到数据库中,尤其是在可以轻松重新创建会话数据的情况下。

答案 1 :(得分:3)

  1. Java EE不限制HTTP会话的大小。您的webapp的RAM要求将是x + su * s,其中“x”是其他所有内容,“su”是并发会话用户的最大数量,“s”是会话对象大小本身。因此,如果这是一个不超过5个用户的应用程序,请选择它。如果它有1500个用户,您可能需要重新考虑。每个会话对象的序列化/反序列化所需的时间将或多或少地随对象的大小线性增加。因此,如果需要进行大量的串行转换,请做好准备。
  2. 只要你的会话还活着,你就可以。
  3. 持久性sesion数据在性能上是昂贵的,只有在出于恢复原因需要群集中的会话复制时才应该这样做。
相关问题