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