powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Где живут объекты в сервлете
6 сообщений из 6, страница 1 из 1
Где живут объекты в сервлете
    #38808058
Cpt. Gray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени!

Сразу скажу, что я не гуру JVM и моделей памяти и т.д. И представляю это все крайне смутно

Поэтому и возник такой вопросик: где живут объекты, которые создаются сервлетом?

Как я понимаю, где-то внутри сервера идет вызов а-ля:
Servlet = new МойСервлет();
То есть, сервер единожды загружает наш сервлет

Метод init(…) вызывается только 1 раз при загрузке сервлета сервером

Где будут жить объекты, которые созданы в результате вызова метода init(…)?

Код: java
1.
2.
3.
4.
private MyClass obj;
public void init(ServletConfig config) throws ServletException {
obj = new MyClass();
}



Объект obj будет жить в обычной «куче» на сервере?
И уничтожен такой объект будет только при выгрузке сервлета?

Тогда не совсем понимаю, чем тогда это отличается от статической инициализации?

Код: java
1.
2.
3.
private static MyClass obj = new MyClass();
public void init(ServletConfig config) throws ServletException {
}



При запросах от разных клиентов все-равно ж будет обращение к одному и тому же объекту?

Есть ли какие-то особенности статических полей при работе с сервлетами? Или все абсолютно идентично к обычным приложениям? (стек, куча, пермген т.д.?)
...
Рейтинг: 0 / 0
Где живут объекты в сервлете
    #38808067
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объекты сервлета ничем не отличаются в размещении и сборке мусора от объектов приложения.
Но, в методы сервлета могут (и будут) исполняться во многих потоках, которыми управляет контейнер, а не само приложение.
Поэтому вопрос - с чем связан ваш вопрос?
...
Рейтинг: 0 / 0
Где живут объекты в сервлете
    #38808081
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cpt. GrayПоэтому и возник такой вопросик: где живут объекты, которые создаются сервлетом?

Все объекты живут в куче.

Cpt. GrayКак я понимаю, где-то внутри сервера идет вызов а-ля:
Servlet = new МойСервлет();
То есть, сервер единожды загружает наш сервлет

Может создать и не единожды, если надо. В спеке ничего не сказано о количестве экземпляров.

Cpt. GrayГде будут жить объекты, которые созданы в результате вызова метода init(…)?
Объект obj будет жить в обычной «куче» на сервере?

Да. В куче.

Cpt. GrayИ уничтожен такой объект будет только при выгрузке сервлета?

Нет. GC уничтожает объекты на которые никто больше не ссылается.

Тогда не совсем понимаю, чем тогда это отличается от статической инициализации?

Cpt. Gray
Код: java
1.
2.
3.
private static MyClass obj = new MyClass();
public void init(ServletConfig config) throws ServletException {
}



Ну, например тем что в этом случае инициализация может произойти раньше, когда сервер ещё чего-нибудь не загрузил. Класс сервлета инициализируется при обращении к классу (каким либо его членам). А init() метод может быть вызван, например, при первом HTTP запросе на этот сервлет.

Cpt. GrayПри запросах от разных клиентов все-равно ж будет обращение к одному и тому же объекту?

Ну, если поле static final, то скорее всего да. Сервера не особо увлекаются пулированием. Но, если переписать значение поля, то разные клиенты могут видеть разные значения. А ещё можно вспомнить о кластеризации и подумать как будет сервлет вести себя в распределенном сервере. Будет ли инициироваться на каждой ноде или нет?

Cpt. GrayЕсть ли какие-то особенности статических полей при работе с сервлетами? Или все абсолютно идентично к обычным приложениям? (стек, куча, пермген т.д.?)
Да. Есть одна особенность: "Не использовать не final поля в сервлетах".
...
Рейтинг: 0 / 0
Где живут объекты в сервлете
    #38808083
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cpt. GrayЕсть ли какие-то особенности
особенность - разработчики решили, что отныне за безопасность межпотоковую объектов отвечает сам программист)).
Контейнер тока "наплодит" потоки сколько нужно.
...
Рейтинг: 0 / 0
Где живут объекты в сервлете
    #38808088
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cpt. GrayТо есть, сервер единожды загружает наш сервлетОдин и тот же сервлет может быть развёрнут в нескольких контекстах и с этими контекстами могут быть связаны разные параметры.Тогда не совсем понимаю, чем тогда это отличается от статической инициализации?
Код: java
1.
2.
3.
private static MyClass obj = new MyClass();
public void init(ServletConfig config) throws ServletException {
}

Начнём с того, что статическая инициализация делается "слишком рано".
Статическую инициализацию можно использовать, если вам действительно требуется инициализировать статические переменные, никак не связанные с жизненным циклом сервлета.
Продолжим тем, что параметры контекста можно читать только в методе init.
...
Рейтинг: 0 / 0
Где живут объекты в сервлете
    #38811079
Cpt. Gray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем большое!
Суть понял :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Где живут объекты в сервлете
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]