1
Aresxue 2020-05-22 11:17:02 +08:00
Heap memory 堆内存:JVM 进程内的内存,由 JVM 管理以表示 Java 对象
Native memory/Off-heap:是在不在堆内的进程地址空间内分配的内存(还属于 JVM 的进程分配内存) Direct Memory 直接内存:类似于本机,但也意味着正在共享硬件中的底层缓冲区。例如网络适配器或图形显示中的缓冲区。这里的目标是减少在内存中复制相同字节的次数 是分配在 C Heap 上的 Buffer,由于不属于 JVM HEAP,管理 /监控起来会比较困难,但也会被 GC 回收。DirectByteBuffer 自身是( Java )堆内的,它背后真正承载数据的 buffer 是在( Java )堆外——Native memory 中的 native heap: 本机内存(原指机器的所有内存,jvm 进程使用的也是它的一部分,但一般场景下经常指不属于 jvm 进程的内存) |
2
CRUD 2020-05-22 11:25:43 +08:00
1.元空间使用的就是直接内存,即元空间时在直接内存上分配
2.直接内存是使用 native 函数库直接分配的,使用 native 函数库直接分配堆外内存后在通过存储在 Java 堆中的 DirectByteBuffer 对象做为这块内存的的引用进行操作,不受 Java 虚拟机管理,大小不受 Java 堆限制但受物理机总内存限制。 |
3
wysnylc 2020-05-22 11:58:41 +08:00
8 还好还是分代模型,ZGC 直接推翻标记整理+复制算法而且(暂时)不分代
|
4
sonice 2020-05-22 13:42:34 +08:00
@Aresxue Direct memory 是省去的 heap 到 native 还是 native 到 kernel 的复制啊?
|
5
luozic 2020-05-22 14:12:21 +08:00
zgc 不分代就是新分配对象内存性能会比分代的 C4GC 性能差点,不过在大内存上面比其他几个 hotspot 的 gc 性能强多了。
|