V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaobaobao
V2EX  ›  Java

java8 的内存模型疑问。

  •  1
     
  •   xiaobaobao · 2020-05-22 10:54:10 +08:00 · 2022 次点击
    这是一个创建于 1631 天前的主题,其中的信息可能已经有所发展或是发生改变。
    8 现在是把之前的方法区转变成了元空间,元空间被放在本地内存中,与此同时我看到很多文章还有写直接内存也是在本地内存中,和元空间并列的
    可是当我去查什么是直接内存,很多都是当作本地内存来说。
    疑问是:
    1:正确的内存模型下本地内存是分为元空间和直接内存吗?
    2:1 成立的话,什么是直接内存?就单单只是直接操作堆外内存?不是一个空间就只是一个操作什么的吗?
    6 条回复    2020-05-23 13:39:48 +08:00
    Aresxue
        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 进程的内存)
    CRUD
        2
    CRUD  
       2020-05-22 11:25:43 +08:00
    1.元空间使用的就是直接内存,即元空间时在直接内存上分配
    2.直接内存是使用 native 函数库直接分配的,使用 native 函数库直接分配堆外内存后在通过存储在 Java 堆中的 DirectByteBuffer 对象做为这块内存的的引用进行操作,不受 Java 虚拟机管理,大小不受 Java 堆限制但受物理机总内存限制。
    wysnylc
        3
    wysnylc  
       2020-05-22 11:58:41 +08:00
    8 还好还是分代模型,ZGC 直接推翻标记整理+复制算法而且(暂时)不分代
    sonice
        4
    sonice  
       2020-05-22 13:42:34 +08:00
    @Aresxue Direct memory 是省去的 heap 到 native 还是 native 到 kernel 的复制啊?
    luozic
        5
    luozic  
       2020-05-22 14:12:21 +08:00
    zgc 不分代就是新分配对象内存性能会比分代的 C4GC 性能差点,不过在大内存上面比其他几个 hotspot 的 gc 性能强多了。
    Aresxue
        6
    Aresxue  
       2020-05-23 13:39:48 +08:00
    @sonice 都有,Direct Memory 使用的是 Native memory/Off-heap,仍归属于 Java 进程,所以该部分内存本身是在用户空间的,但用户态和内核态之间的拷贝其实也被优化了,本质上是因为用户态的逻辑地址和内核态的逻辑地址
    使用的是同一个物理空间,所以相当于用户态和内核态也不存在拷贝
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3485 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:32 · PVG 18:32 · LAX 02:32 · JFK 05:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.