Я отслеживаю этот вопрос и обнаруживаю, что все информация устарела.
Похоже, самое последнее руководство быть этот документ относительно настройки GC. В нем Oracle определяет свой глупый термин «эргономика», который, я думаю, просто означает разумные («удобные») значения по умолчанию. В этом документе данный документ упоминается, который широко цитируется в приведенном выше вопросе SO.
Он утверждает, что максимальный размер кучи рассчитывается следующим образом:
Меньше 1/4 физической памяти или 1 ГБ. До J2SE 5.0 максимальный размер кучи по умолчанию составлял 64 МБ. Вы можете переопределить это значение по умолчанию, используя параметр командной строки -Xmx.
Это явно неверно, поскольку у меня есть машина, на которой я тестировал, с 12 ГБ ОЗУ и 4096 МБ, что подтверждено с помощью java -XX:+PrintFlagsFinal -version | grep HeapSize
. Но оговорка включена:
Примечание. Границы и доли, указанные для размера кучи, верны для J2SE 5.0. Они, вероятно, будут другими в последующих выпусках, поскольку компьютеры становятся более мощными.
Это здорово! За исключением того, что я не могу найти никакой актуальной документации по этому вопросу. Я подтвердил, что использую серверный класс по этому вопросу. Почему это важно? Потому что на моем сервере класса 12 ГБ по умолчанию установлено 170 МБ. Из-за этого все ломается. Да, я знаю, что могу переопределить это. Мне бы не хотелось дублировать это переопределение в каждом приложении, которое я запускаю, и я бы не хотел жестко закодировать его в файлы pom. Более того, это число каким-то образом случайно изменилось на моей машине, и мне нужно понять, как оно произошло.
Вот моя версия Java:
$ java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
У меня Mac OS X 10.9.2.