Я пытаюсь понять, как распределение памяти работает в JVM. Я пишу приложение, в котором у меня возникают исключения Out of Memory: Heap Space.
Я понимаю, что могу передать аргументы виртуальной машины, такие как Xms и Xmx, для увеличения объема кучи, выделяемого JVM для запущенного процесса. Это одно из возможных решений проблемы, или я могу проверить свой код на предмет утечек памяти и исправить проблему там.
Мои вопросы:
1) Как JVM на самом деле выделяет память для себя? Как это связано с тем, как ОС передает доступную память JVM? Или, в более общем плане, как на самом деле работает выделение памяти для любого процесса?
2) Как в игру вступает виртуальная память? Допустим, у вас есть система с 32 ГБ физической памяти, и вы выделяете все 32 ГБ для своего Java-процесса. Допустим, ваш процесс фактически потребляет все 32 ГБ памяти, как мы можем заставить процесс использовать виртуальную память вместо того, чтобы запускать исключения OOM?
Спасибо.
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.
Вы бы не хотели, чтобыcatch(Exception e)
обнаруживал такие ошибки. 21.04.2014