Я вникаю в понимание того, как распределение памяти работает в JVM. Я пишу приложение, в котором я получаю исключение из памяти: исключения в Heap Space.
Я понимаю, что могу передавать аргументы VM, такие как Xms и Xmx, для того, чтобы увеличить кучу пространства, которое JVM выделяет для текущего процесса. Это одно из возможных решений проблемы, или я могу проверить свой код на утечку памяти и исправить там проблему.
Мои вопросы:
1) Как JVM фактически распределяет память для себя? Как это связано с тем, как ОС связывает доступную память с JVM? Или, в общем, как распределяется память для любого процесса?
2) Как виртуальная память вступает в игру? Скажем, у вас есть система с 32 ГБ физической памяти, и вы выделяете все 32 ГБ для вашего Java-процесса. Скажем, что ваш процесс фактически потребляет все 32 ГБ памяти, как мы можем заставить процесс использовать виртуальную память вместо использования в исключениях OOM?
Спасибо.