Интерфейсы являются отличным способом выделения компонентов для целей модульного тестирования и общего управления зависимостями. Сказав это, я часто предпочитаю абстрактные классы, поэтому, по крайней мере, часть общего поведения выгружается туда, а не заставляет некоторые дубликаты, которые приносят интерфейсы. Современные IDE позволяют быстро и легко создавать интерфейсы, поэтому они не , что много работают: -)
Я согласен с Майклом Боргвардтом в том, что вы можете увеличить размер PermGen, я не согласен, что это в первую очередь из-за утечек памяти. Пространство PermGen агрессивно поглощается приложениями, интенсивно использующими Reflection. Так что в основном, если у вас есть приложение Spring / Hibernate, работающее в Tomcat, будьте готовы значительно увеличить пространство PermGen.
Смена JVM - не панацея. Вы можете столкнуться с новыми неожиданными проблемами (например, см. статью о запуске приложения под 4 различными JVM).
[ОБНОВЛЕНО]
Полезная статья , как удалить ссылку загрузчика классов при повторном развертывании приложения.
Что подсказало вам, что JVM Sun ограничена 128M PermGen? Вы можете свободно установить его с помощью параметра командной строки -XX: MaxPermSize; по умолчанию - 64 МБ.
Однако настоящая причина вашей проблемы, вероятно, связана с утечкой памяти в вашем приложении, которая не позволяет классам собирать мусор; они могут быть очень тонкими, особенно когда задействованы загрузчики классов, поскольку все, что требуется, - это одна ссылка на любой из классов в любом месте. Эта статья подробно описывает проблему, а эта предлагает способы ее решения.
Технически пул памяти PermGen - это JVM Sun. Другие JVM не называют это так, но все они имеют представление об одном или нескольких пулах памяти без кучи.
Но если у вас есть проблема с permgen в вашей Sun JVM, переход на другую JVM вряд ли что-то решит, он просто проявится под другим именем.
Если несколько повторных развертываний вызывают ваши проблемы, просто увеличьте PermGen виртуальной машины до больших значений. Некоторое время назад мы пробовали JRockit из-за этой самой проблемы, и он страдает от того же недостатка повторного развертывания. Мы вернулись к SUn JVM.
Я использую JRockit и все равно получаю ошибки PermGen, если я не увеличиваю (с помощью -XX: MaxPermSize) объем памяти. Я также ничего не могу заставить работать, чтобы избежать этого (кроме увеличения).
Perm gen, вероятно, самая простая в обращении память, я сомневаюсь, что между различными реализациями vm будет большая разница .
Убедитесь, что все те конфигурации Tomcat, которые отмечены как выключенные в производственной среде, отключены в производственной среде.
Да, некоторые фреймворки, которые действительно генерируют много классов на лету, но они должны убирать за собой, и, в любом случае, вы можете уместить больше, чем несколько классов в 128 Мбайт.
Серьезно, если perm gen продолжает расти, то утечку следует исправить, хотя это может не быть вашей проблемой.
Убедитесь, что все конфигурации Tomcat, помеченные как выключенные в производственной среде, отключены в производственной среде.
Да, некоторые фреймворки, которые действительно генерируют много классов на лету, но они должны убирать за собой, и в любом случае, вы можете уместить больше, чем несколько классов в 128 Мбайт.
Серьезно, если perm gen продолжает расти, то утечку следует исправить, хотя это может не быть вашей проблемой.
Убедитесь, что все конфигурации Tomcat, помеченные как выключенные в производственной среде, отключены в производственной среде.
Да, некоторые фреймворки, которые действительно генерируют много классов на лету, но они должны убирать за собой, и в любом случае, вы можете уместить больше, чем несколько классов в 128 Мбайт.
Серьезно, если perm gen продолжает расти, то утечку следует исправить, хотя это может не быть вашей проблемой.