我试图对此进行探索,但找不到包含基础知识的答案。
我想知道JVM或java程序(如堆内存,本机内存等)所完成的内存消耗类型。
但我还想知道什么是这个本机内存,也称为C-heap。
我正在寻找包含非常基础知识的解释。
答案 0 :(得分:3)
Java程序在Java运行时的虚拟化环境中运行。这个运行时本身就是一个本机进程(就像任何其他进程一样)。因此,本机内存的限制是由进程运行的硬件和操作系统强加的。
所有现代操作系统都使用虚拟内存,其中每个正在运行的程序都分配有自己的虚拟地址空间,其大小由底层架构决定。对于Intel x86-32位架构,最大可用地址空间为2 ^ 32 - 1,相当于4GB。即使一个进程有自己的虚拟空间,它也无法使用它。此虚拟空间分为内核和用户空间。在x86-32上运行的Windows操作系统上,2GB用于用户空间,2GB用于内核空间,在Linux上用于3GB到1GB。
对于Java进程,用户空间可以在逻辑上划分为堆内存*和本机内存。堆内存的大小由" Xms,Xmx"决定。没有可以用来管理本机内存的选项,因为这是由JRE为您完成的。在应用程序因OutOfMemoryException而死亡之前,始终检查本机内存消耗并检测泄漏始终是最佳做法。 堆内存只是JVM管理的用户空间的一部分。