В духе вопроса Java: Почему существует MaxPermSize?, я хотел бы спросить, почему Sun JVM использует фиксированный верхний предел для размера своего пул распределения памяти.
По умолчанию используется 1/4 физической памяти (с верхним и нижним пределом); как следствие, если у вас есть приложение, зависящее от памяти, вам нужно вручную изменить лимит (параметр -Xmx), или ваше приложение будет работать плохо, возможно даже сбой с помощью OutOfMemoryError.
Почему этот фиксированный предел существует? Почему JVM не выделяет память по мере необходимости, например, в большинстве операционных систем?
Это решило бы целый класс общих проблем с программным обеспечением Java (просто Google, чтобы узнать, сколько намеков есть в сети при решении проблем, установив -Xmx).
Edit:
В некоторых ответах указывается, что это защитит остальную систему от программы Java с утечкой памяти; без ограничения это приведет к тому, что вся система будет исчерпана всей памятью. Это верно, однако, это одинаково верно для любой другой программы, и современные ОС уже позволяют ограничить максимальную память для программы (Linux ulimit, Windows "Объекты задания" ). Поэтому на самом деле это не отвечает на вопрос: "Почему JVM делает это по-другому от большинства других программ/сред среды выполнения?".