Недавно я установил плагин XRebel, который позволяет вам видеть текущий размер сеанса.
Я обнаружил, что сеанс мгновенно доходит до 10 мб при загрузке первой страницы (инициализация сеанса сеанса аутентификации).
К моей настройке:
Я использую JSF 2.2, Spring 4 и Hibernate 4.
Уровень DAO> Уровень обслуживания> Управляемый компонент
Уровень DAO
@Named
@Singleton
@Repository
public class UserDao extends BaseDao<User>
{
...
}
Уровень обслуживания
@Service
@Named
@Singleton
public class UserService extends BaseService<User>
{
@Autowired
private UserDao dao;
...
}
Мой сеанс сеанса аутентификации, который загружается при загрузке первой страницы
@Named
@Component
@Scope("session")
public class Auth implements Serializable
{
@Autowired
private UserService userService;
...
}
В моем applicationContext.xml я использую
<context:component-scan base-package="com.mypackage" />
Это общая проблема, которую я имею, когда я автообновляю bean-компоненты службы в своих сессионных компонентах.
Служба Userservice содержит только методы для извлечения, сохранения и удаления пользовательских объектов, не содержащих ArrayList или каких-либо других.
У меня есть два @Autowired службы в моем Иденте бобе - UserService и SessionService.
Если я выйду из UserService, SessionService достигнет такого же размера. Если я прокомментирую и то, что есть "DestructionCallbackBindingListener" из "org.springframework.web.context.request.ServletRequestAttribute...", который достигает 8mb мгновенно.
Что я делаю не так? Как уменьшить размер сеанса?
Я с радостью принимаю любую помощь.
Вот образ XRebel, показывающий, что userService занимает около 8 МБ в сеансе. http://i.stack.imgur.com/TBXx3.png
Глядя на XRebel, кажется, что beanFactory сохраняется в сеансе пользователя.
Я опубликовал на официальных форумах относительно XRebel. Это ответ, который я получил.
Действительно, beanFactory доступен из сеанса через прокси CGLIB. Возможно, нам нужно будет улучшить то, как мы распознаем объекты, которые являются общими или не должны рассматриваться как часть сеанса.
Мы пытаемся показать, сколько памяти занимает каждый сеанс, но Spring beanFactories, конечно же, делится между сеансами.
Часто тот факт, что мы отфильтровываем переходные поля из сеанса, достаточно, но хорошо взгляните на прокси CGLIB/Spring, чтобы увидеть, как мы можем отфильтровывать их по общему правилу, или, может быть, мы можем просто добавить определенные классы Spring для игнорирования список.
Короче говоря: beanfactory можно игнорировать при просмотре размера сеанса, опционально, если это возможно, отметить переходный процесс с автоподдержкой.
В самом деле, вы можете игнорировать это мысленно или сейчас, если это возможно, да, делая переходные переменные исключат их.