【发布时间】:2015-06-03 14:20:47
【问题描述】:
最近我在学习 JVM 内部时遇到了这些概念。我知道关于 SO 已经有很多关于它们的问题,但我仍然无法掌握它们之间的关系,或者说它们是什么。
现在我这样描述它们:
-
本机内存是指正常 JVM 堆之外的内存区域,但仍在操作系统为 JVM 进程预留的总用户空间内存范围内(例如在 32 位 Windows 上,默认为 2 GB) .这个空间是JVM预留的,用来存放一些内部数据,比如Permanent Generation / Method Area等。
-
直接内存表示您通过
java.nio.DirectByteBuffer使用本机内存。 -
本机堆意味着您通过
unsafe.allocateMemory使用本机内存,或者在您的JNI 代码中简单地使用malloc。 -
堆外与本机内存相同。
还有一个问题,是否可以直接在为 JVM 进程预留的总内存空间(32 位操作系统上为 4GB)之外分配内存?
请指出我理解中的错误,如果可能,请给出清晰的描述。
【问题讨论】: