На самом деле я всегда считал очень странным, что Java ограничивает размер кучи. Собственное приложение обычно может использовать столько кучи, сколько захочет, пока не закончится виртуальное адресное пространство. Единственная причина ограничить кучу на Java - это сборщик мусора, который имеет определенную «лень» и не может мусор собирать предметы, если нет необходимости делать это. Это означает, что если вы выберете слишком большую кучу, ваше приложение будет постоянно использовать больше памяти, чем это действительно необходимо.
Тем не менее, за последние годы Солнце улучшило GC и, чтобы эмулировать поведение родного приложения C, я бы установил размер начальной кучи до 32 МБ (для небольших программ) или 64 МБ (для более крупных) и максимум до 1-2 ГБ. Если вашему приложению действительно требуется более 1 ГБ памяти, он, скорее всего, будет поврежден (если вы не справитесь с большими объектами данных), но я не вижу причин, по которым ваше приложение должно быть убито, просто потому, что оно переместило определенный размер кучи.
Конечно, это относится к обычным ПК. Если вы создаете Java-код для мобильных телефонов или других ограниченных устройств, вы, вероятно, должны использовать начальный и максимальный размер кучи для ограничений этого устройства.
Какой ответ вы ожидаете? Должен ли я ответить, что я запускаю свою Java с помощью `-Xmx512`? Что вы ожидаете? – 2008-09-17 13:29:48
Да, но вы также должны добавить информацию о своем приложении, jdk и os. – trunkc 2008-09-17 13:42:25