HttpSession хранит атрибут по ссылке или значению? - PullRequest
2 голосов
/ 05 июля 2011

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

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

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

Спасибо!

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

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

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

2 голосов
/ 05 июля 2011

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

...