最近我在学习JVM内部时遇到了这些概念。我知道Stack Overflow上已经有很多关于它们的单独问题,但我仍然无法理解它们之间的关系或者说它们到底是什么。
下面是我的理解:
1. Native memory 指的是普通JVM堆外的内存区域,但仍然在操作系统为JVM进程预留的用户空间内存总量之内(例如32位Windows上默认为2GB)。JVM保留此空间来存储一些内部数据,如永久代/方法区等。
2. Direct memory 意味着通过 java.nio.DirectByteBuffer 使用本机内存。
3. Native heap 意味着你可以通过 unsafe.allocateMemory 或在JNI代码中直接使用 malloc 来使用本机内存。
4. Off-heap 与本机内存相同。
另外一个问题是,是否可能在 JVM 进程的总内存空间(32位操作系统上为4GB)之外直接分配内存?
请指出我的理解错误,并尽可能清晰地描述它们。
下面是我的理解:
1. Native memory 指的是普通JVM堆外的内存区域,但仍然在操作系统为JVM进程预留的用户空间内存总量之内(例如32位Windows上默认为2GB)。JVM保留此空间来存储一些内部数据,如永久代/方法区等。
2. Direct memory 意味着通过 java.nio.DirectByteBuffer 使用本机内存。
3. Native heap 意味着你可以通过 unsafe.allocateMemory 或在JNI代码中直接使用 malloc 来使用本机内存。
4. Off-heap 与本机内存相同。
另外一个问题是,是否可能在 JVM 进程的总内存空间(32位操作系统上为4GB)之外直接分配内存?
请指出我的理解错误,并尽可能清晰地描述它们。