Как вычислить объем памяти Native Heap в Java-процессе для Hotspot JVM
Насколько я понимаю, 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?
Если мое понимание верно, то почему мы говорим, что максимальная доступная память для Metaspace, которая выделяется из Native memory, является общей доступной системной памятью. Максимальная виртуальная память, которую получает каждый процесс, будет максимально возможным диапазоном виртуальной адресации в системе, и из этого некоторый объем памяти будет занят кучей и ОС.
Если мы установим общую память, выделенную для обработки, в качестве памяти кучи, то не будет ли она выбрасывать OutOfMemoryError:Metaspace, поскольку для этого процесса не будет доступной Native Heap?
Пожалуйста, помогите мне исправить мое понимание. Благодарю.