|
|
|
Где живут объекты в сервлете
|
|||
|---|---|---|---|
|
#18+
Доброго времени! Сразу скажу, что я не гуру JVM и моделей памяти и т.д. И представляю это все крайне смутно Поэтому и возник такой вопросик: где живут объекты, которые создаются сервлетом? Как я понимаю, где-то внутри сервера идет вызов а-ля: Servlet = new МойСервлет(); То есть, сервер единожды загружает наш сервлет Метод init(…) вызывается только 1 раз при загрузке сервлета сервером Где будут жить объекты, которые созданы в результате вызова метода init(…)? Код: java 1. 2. 3. 4. Объект obj будет жить в обычной «куче» на сервере? И уничтожен такой объект будет только при выгрузке сервлета? Тогда не совсем понимаю, чем тогда это отличается от статической инициализации? Код: java 1. 2. 3. При запросах от разных клиентов все-равно ж будет обращение к одному и тому же объекту? Есть ли какие-то особенности статических полей при работе с сервлетами? Или все абсолютно идентично к обычным приложениям? (стек, куча, пермген т.д.?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 12:05 |
|
||
|
Где живут объекты в сервлете
|
|||
|---|---|---|---|
|
#18+
Объекты сервлета ничем не отличаются в размещении и сборке мусора от объектов приложения. Но, в методы сервлета могут (и будут) исполняться во многих потоках, которыми управляет контейнер, а не само приложение. Поэтому вопрос - с чем связан ваш вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 12:11 |
|
||
|
Где живут объекты в сервлете
|
|||
|---|---|---|---|
|
#18+
Cpt. GrayПоэтому и возник такой вопросик: где живут объекты, которые создаются сервлетом? Все объекты живут в куче. Cpt. GrayКак я понимаю, где-то внутри сервера идет вызов а-ля: Servlet = new МойСервлет(); То есть, сервер единожды загружает наш сервлет Может создать и не единожды, если надо. В спеке ничего не сказано о количестве экземпляров. Cpt. GrayГде будут жить объекты, которые созданы в результате вызова метода init(…)? Объект obj будет жить в обычной «куче» на сервере? Да. В куче. Cpt. GrayИ уничтожен такой объект будет только при выгрузке сервлета? Нет. GC уничтожает объекты на которые никто больше не ссылается. Тогда не совсем понимаю, чем тогда это отличается от статической инициализации? Cpt. Gray Код: java 1. 2. 3. Ну, например тем что в этом случае инициализация может произойти раньше, когда сервер ещё чего-нибудь не загрузил. Класс сервлета инициализируется при обращении к классу (каким либо его членам). А init() метод может быть вызван, например, при первом HTTP запросе на этот сервлет. Cpt. GrayПри запросах от разных клиентов все-равно ж будет обращение к одному и тому же объекту? Ну, если поле static final, то скорее всего да. Сервера не особо увлекаются пулированием. Но, если переписать значение поля, то разные клиенты могут видеть разные значения. А ещё можно вспомнить о кластеризации и подумать как будет сервлет вести себя в распределенном сервере. Будет ли инициироваться на каждой ноде или нет? Cpt. GrayЕсть ли какие-то особенности статических полей при работе с сервлетами? Или все абсолютно идентично к обычным приложениям? (стек, куча, пермген т.д.?) Да. Есть одна особенность: "Не использовать не final поля в сервлетах". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 12:15 |
|
||
|
Где живут объекты в сервлете
|
|||
|---|---|---|---|
|
#18+
Cpt. GrayЕсть ли какие-то особенности особенность - разработчики решили, что отныне за безопасность межпотоковую объектов отвечает сам программист)). Контейнер тока "наплодит" потоки сколько нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 12:16 |
|
||
|
Где живут объекты в сервлете
|
|||
|---|---|---|---|
|
#18+
Cpt. GrayТо есть, сервер единожды загружает наш сервлетОдин и тот же сервлет может быть развёрнут в нескольких контекстах и с этими контекстами могут быть связаны разные параметры.Тогда не совсем понимаю, чем тогда это отличается от статической инициализации? Код: java 1. 2. 3. Начнём с того, что статическая инициализация делается "слишком рано". Статическую инициализацию можно использовать, если вам действительно требуется инициализировать статические переменные, никак не связанные с жизненным циклом сервлета. Продолжим тем, что параметры контекста можно читать только в методе init. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 12:19 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38811079&tid=2126238]: |
0ms |
get settings: |
13ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
141ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 476ms |

| 0 / 0 |
