добрый день, вебдевелоперы!

есть томкат, на котором установлена opencms. одна из jsp внутри opencms обращается к классу, находящемуся в скомпилированной либе. класс этот статический. верны ли утверждения:

1. этот класс существует только во время выполнения jsp и может быть причиной утечки памяти.
2. сервлеты, генерируемые jsp, находятся в памяти только во время работы соответствующей страницы jsp и уничтожаются после завершения.?

Tagged with →  

10 Responses to добрый день, вебдевелоперы!

  1. WebDev:

    не актуально

  2. Veaer:

    Что такое статический класс? Nested Static Class?

    JSP OpenCMS по сути ничем не отличаются от обычных JSP, за исключением того, что они хранятся в базе, а не на диске. Life-cycle у них такой же, как у и обычных сервлетов:
    1. JVM загружает класс
    2. Создаётся instance этого класса
    3. Вызывается метод init()
    4. Tomcat дёргает метод service() при каждом запросе страницы

  3. WebDev:

    спасибо. а разве jsp не компилируется при каждом вызове?

  4. WebDev:

    да, вложенный статический класс

  5. Veaer:

    Stephan-V: нет конечно. Только при изменении и первоначальной загрузке. Можете посмотреть папку work томкета, там хранятся скомпилированные файлы. В OpenCMS есть в частности Clear JSP Cache, который чистит папку work.

  6. Veaer:

    Stephan-V: Nested Static Class — по сути обычные классы, которые имеют доступ к private static полям класса в котором они объявлены. LifeCycle у них такой же, как и у обычных классов.

  7. WebDev:

    то есть если не уничтожается ссылка на класс, в который он вложен, то память может течь?

  8. WebDev:

    Stephan-V: а, чёрт, он у меня абстрактный

  9. Veaer:

    Stephan-V: ссылка на класс, в который он вложен не играет никакой роли.

    class A { private static class B {} }

    test.jsp

    <% A.B instance = new A.B(); %>

    После выполнения GC подчистит instance. Независимо от того, живут в JVM объекты класса A или нет.

  10. WebDev:

    то есть утечек в jsp не следует опасаться?

Добавить комментарий