2016-06-02 5 views
1

У меня есть сервлет с выполнением класса с основным методом(), который обычно можно запускать через командную строку.Память выделена для основного класса, выполненного из сервлета?

В веб-контейнере, таком как tomcat, weblogic server, веб-контейнер будет иметь свое собственное определенное кучное пространство и количество потоков для выполнения запроса, отправленного веб-приложением.

Если я запускаю класс с основным методом() в моем сервлете, какими будут память и потоки, выделенные для этого класса?

+0

Как бы вы «начали класс с основным методом»? Через 'MyClass.main()' или через 'Runtime.exec()'? –

+0

@ piet.t начал с MyClass.main() – youcanlearnanything

ответ

1

При вызове метода по вызову MyClass.main() (как указано в комментарии) не имеет значения, что вы вызвали метод main - он будет похож на любой другой метод-вызов. А такой

  • Любая память, используемая во время выполнения будет выделена на куче TOMCAT
  • игровой
  • выполнения будет в потоке, который обрабатывает сервлетный-запрос. Таким образом, сервлет не продолжит обработку до выхода main().

Самый простой способ можно использовать для хранения, которое не из кучи TOMCAT была бы породить новую VM-процесса с помощью Runtime.exec() и запустить программу там. Это приведет к довольно накладным расходам, так как запуск виртуальной машины может занять некоторое время.

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

+0

В этом случае это приведет к голоданию потоков, поскольку у меня есть много таких запросов. Мой клиент вызывает мой сервлет и зависит от моего сервлета, чтобы вернуть некоторые результаты, но обработка занимает много времени. В любом случае я могу реализовать асинхронный сервлет и вернуть результаты клиенту при завершении обработки? – youcanlearnanything

Смежные вопросы