Большая война портлетов занимает память, вызывая проблемы с производительностью?

Я слышал, как несколько человек говорят, что развертывание файла войны портлетов (или, возможно, любого файла войны), который включает в себя множество больших файлов jar, может вызвать проблемы с производительностью, потому что все эти файлы jar загружаются в память. Если у вас есть несколько войн, каждая из которых включает в себя массу больших JAR-файлов, ваша система увязнет.

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


person Michaela    schedule 04.10.2010    source источник


Ответы (1)


Короткий ответ: да, развертывание файла войны с большим количеством jar-файлов может вызвать проблемы с производительностью. Неважно, содержит ли война портлет или стандартное веб-приложение. Но, на мой взгляд, не стоит об этом преждевременно беспокоиться, потому что есть простые решения этой проблемы.

Когда портлет или любое веб-приложение загружается на сервер, он загружает классы основного JAR-файла в область постоянной генерации кучи (память, назначенная процессу Java) веб-сервера. В этой области хранится исполняемый код. Когда эти классы используют код из других jar-файлов, их код также загружается в эту область. Если эти регионы заполнены, вы получите исключение OutOfMemoryError.

Решения ваших проблем просты:

  1. Выделите больше памяти для вашей памяти (параметр -Xmx JVM)

  2. Если у вас есть несколько файлов .war с одинаковыми файлами jar, удалите эти файлы jar из файлов war и поместите их в каталог, где расположены все общие библиотеки веб-сервера. Расположение этого каталога зависит от используемого вами сервера веб-приложений.

Таким образом, вам не следует беспокоиться об этой проблеме, потому что у нее есть решение.

Этот PDF-файл Управление памятью в виртуальной машине JavaHotSpot™ объясняет, как работает управление памятью в Java. Это относится к обычным Java-приложениям и веб-приложениям.

person Montecarlo    schedule 07.10.2010