HttpSession хранит атрибут по ссылке или значению?

Я использую HttpSession в своем серверном приложении. А для сеанса задайте атрибуты. Мой вопрос в следующем: как устанавливается атрибут для сеанса - по ссылке или значению.

Вопрос в том, что боится, что не будет исключения пространства кучи java и экономии оперативной памяти.

Например: если я создам array1 без сохранения состояния и установлю это как атрибут для разных сеансов. В этом случае все сеансы будут работать с array1 как с «одиночным» экземпляром, а может и нет.

Спасибо!


person Tioma    schedule 05.07.2011    source источник


Ответы (2)


Все объекты (включая массивы) передаются по ссылке в Java. Поэтому, если вы сохраните один и тот же экземпляр массива в нескольких HttpSession, он будет общим для них. Размер массива не может быть изменен, однако его элементы могут быть изменены, будь то примитивы или ссылки, поэтому вы должны быть осторожны в высококонкурентных средах, таких как сервлеты.

Еще один аспект, о котором вы, возможно, захотите позаботиться, заключается в том, что все атрибуты HttpSession должны быть сериализуемыми.

person Laurent Pireyn    schedule 06.07.2011

Это будет один и тот же объект во всех сеансах, хотя я не могу придумать много причин, чтобы сделать что-то подобное. Я не уверен, что именно вы подразумеваете под массивом без сохранения состояния, возможно, вы имеете в виду неизменяемый? К такому объекту, совместно используемому между сеансами, нужно подходить с особой осторожностью, когда речь идет о безопасности потоков, если он не является неизменным.

person laz    schedule 05.07.2011