Почему мы должны увеличить кучу Java? - PullRequest
4 голосов
/ 12 мая 2009

Я знаю, как установить размер кучи Java в Tomcat и Eclipse. Мой вопрос почему? Был ли произвольный предел, установленный для начальной кучи, когда Java была впервые представлена, чтобы виртуальная машина не увеличивалась до определенного размера? Кажется, с большинством машин сегодня с большим объемом доступной памяти это не то, с чем мы должны иметь дело.
Спасибо, Том

Ответы [ 4 ]

5 голосов
/ 12 мая 2009

Даже сейчас куча не растет без ограничений.

Когда старшее поколение заполнено, вы должны расширить его или просто GC? Или вам следует расширять его, только если GC не освобождает память?

.NET использует подход, который вам нужен: вы не можете сказать, что он использует только определенное количество кучи. Иногда кажется, что это лучшая идея, но иногда приятно иметь два процесса на одной машине и знать, что ни один из них не сможет захватить всю память ...

4 голосов
/ 12 мая 2009

Я посмотрел на это на днях, но я не уверен, что это то, что вы хотите: -XX:+AggressiveHeap. Согласно Солнцу :

Эта опция дает команду JVM нажать использование памяти до предела: общее куча больше 3850МБ, то область выделения каждого потока 256К, политика управления памятью откладывает сбор как можно дольше, и (начиная с J2SE 1.3.1_02) некоторая активность GC выполняется параллельно.

Поскольку этот параметр устанавливает размер кучи, выполните не использовать параметры -Xms или -Xmx в соединение с -XX: + AggressiveHeap. Это приведет к тому, что варианты переопределить настройки друг друга для размер кучи.

Я не был уверен, действительно ли это означало то, что, как я думал, означало, - что вы можете просто позволить JVM сожрать кучу пространства, пока оно не будет удовлетворено. Тем не менее, это не похоже на то, что это хороший вариант для использования в большинстве ситуаций.

0 голосов
/ 12 мая 2009

Java - это кроссплатформенная система. Некоторые системы (например, Unix и derviates) имеют команду ulimit, которая позволяет вам ограничить объем памяти, который может использовать процесс. Другие нет. Плюс Java иногда запускается встроенным, например, в веб-браузере. Вы не хотите, чтобы сломанный апплет сломал ваш рабочий стол (ну, по крайней мере, это была идея, но апплеты никогда не завоевывали популярность, но это другая история). По сути, этот параметр является одним из ключевых краеугольных камней для песочницы .

Таким образом, разработчикам виртуальных машин потребовалось портативное решение: они добавили в виртуальную машину опцию, которая позволяла бы любому пользователю (пользователю, администратору, веб-браузеру) контролировать объем ОЗУ, который виртуальная машина могла бы выделить. Потребности различных видов использования Java слишком разнообразны, чтобы иметь один размер для всех.

Это становится еще важнее сегодня, когда вы смотрите на мобильные устройства. Ваш рабочий стол имеет 2-8 ГБ оперативной памяти, но ваш мобильный, вероятно, гораздо меньше. И для этих вещей вы действительно не хотите, чтобы одно плохое приложение могло сломать устройство, потому что даже не было бы пользователя, который мог бы проверить.

0 голосов
/ 12 мая 2009

Я думаю, что было бы хорошо иметь возможность установить ограничение, чтобы, если у вас возникли проблемы с памятью, она не сожрала бы всю системную память, оставив вам только возможность перезагрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...