2010-10-04 4 views
2

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

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

ответ

2

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

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

Решения для ваших задач легко:

  1. Посвятите больше памяти в память (параметр -Xmx из виртуальной машины Java)

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

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

В этом PDF http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf объясняется, как управление памятью работает на Java. Это относится к обычным Java-приложениям и веб-приложениям.

+0

Спасибо - теперь я понял! – Michaela

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