Насколько я понимаю, Native Heap - это память, оставшаяся после выделения максимального размера кучи для процесса Java.
Для 32-битного процесса Java - максимальная виртуальная память, которая может быть выделена этому процессу, будет 4 ГБ.Предположим, что из этих 4 ГБ мы установили 2 ГБ для максимальной кучи, а 1 ГБ используется ОС.Тогда оставшуюся 1 ГБ памяти можно назвать Native Heap?
Аналогично, для 64-битного процесса Java максимальный объем памяти, который может быть выделен для процесса, может быть больше 4 ГБ.Допустим, в моей системе 16 ГБ ОЗУ, тогда максимальная виртуальная память, которая может быть выделена для каждого процесса в моей системе, будет 16 ГБ, так как диапазон Виртуального адресного пространства не позволит использовать более 16 ГБ памяти.так?
Итак, Native Heap для 64-битного Java-процесса будет (16-2 (-Xmx) -1 (OS)), то есть 15 ГБ?
Мое понимание вычисления Native Heap таково?правильно?
Если мое понимание правильное, то почему мы говорим, что максимальная доступная память для метапространства , которая выделяется из собственной памяти, составляет общая доступная системная память .Максимальная виртуальная память, которую получает каждый процесс, будет максимально возможным диапазоном виртуальной адресации в системе, и из этого некоторый объем памяти будет занят кучей и ОС.
Если мы установим общий объем памяти, выделенной для обработки, в качестве памяти кучи, то не будет ли он выбрасывать outOfMemoryError: Metaspace , поскольку для этого процесса не будет доступно Native Heap?
Пожалуйста, помогите мне исправить мое понимание.Спасибо.