据我了解,本机堆是为Java进程分配最大堆大小后剩余的内存。
对于32位Java进程-可以分配给该进程的最大虚拟内存为4GB。在这总4GB中,假设我们为最大堆设置了2GB,而OS使用了1GB。那么,剩余的1GB内存可以称为Native Heap吗?
类似地,对于64位Java进程,可以分配给进程的最大内存可以大于4GB。可以说,我的系统中有16GB的RAM,那么由于虚拟地址空间范围将不允许超过16GB的内存,因此可以分配给系统中每个进程的最大虚拟内存为16GB。是吗?
那么,用于64位Java进程的Native Heap是否会(16-2(-Xmx)-1(OS))即15GB?
我对本机堆计算的理解正确吗?
如果我的理解是正确的,那么为什么我们说从本地内存分配的元空间的最大可用内存是总可用系统内存。每个进程获得的最大虚拟内存将是系统中可能的最大虚拟可寻址范围,并且超出此数量的内存将由堆和OS占用。
如果将分配给进程的总内存设置为堆内存,那么将不会抛出 outOfMemoryError:Metaspace ,因为该进程将没有可用的本机堆吗?
请帮助我纠正我的理解。谢谢。