JVM的直接内存

一. 直接内存(堆外内存)

  1. Java的Unsafe类---内地内存的操作

  2. Netty#ByteBuffer,底层操作系统malloc函数

  3. JNI或JNA

 

为什么要使用之直接内存

  1. 减少垃圾回收工作,减少STW:直接内存不受JVM控制,需要手动回收

  2. 加快复制的速度:例如网络IO的情景,当数据需要发送到网卡时,操作系统会将JVM堆中的数据拷贝一份到直接内存,也就是用户态到内核态的拷贝。使用直接内存并配合其他技术(mmap、sendfile)可实现零拷贝。

  3. 进程间的共享

  4. 堆,受限于虚拟机,直接操作1TB的内存更适合用直接内存

直接内存有什么限制

  1. 不好控制,出现内存泄漏很难排查

  2. 相对于堆,不适合存储复杂对象

posted @ 2020-09-26 15:35  Super-Yan  阅读(356)  评论(0编辑  收藏  举报