Я играю с написанием простых веб-приложений на основе Spring и развертывания их в Tomcat. Почти сразу я столкнулся с необходимостью настроить параметры JVM Tomcat с помощью -XX: MaxPermSize (и -Xmx и -Xms); без этого сервер легко исчерпывает пространство PermGen.
Почему такая проблема для виртуальных машин Java по сравнению с другими сборщиками мусора? Сравнение подсчетов "использования памяти Tune X" для X в Java, Ruby, Perl и Python показывает, что на Java на порядок больше попаданий в Google, чем на других языках.
Мне также интересны ссылки на технические документы /blog -posts/etc, объясняющие выбор дизайна для реализации JVM GC, различных JVM или по сравнению с другими интерпретируемыми языковыми виртуальными машинами (например, сравнение Sun или IBM JVM с Parrot). Существуют ли технические причины, по которым пользователям JVM по-прежнему приходится иметь дело с неавтоматическими настройками размеров кучи/подмены?