JVM的直接内存
一. 直接内存(堆外内存)
1. Java的Unsafe类---内地内存的操作
2. Netty#ByteBuffer,底层操作系统malloc函数
3. JNI或JNA
为什么要使用之直接内存
1. 减少垃圾回收工作,减少STW:直接内存不受JVM控制,需要手动回收
2. 加快复制的速度:例如网络IO的情景,当数据需要发送到网卡时,操作系统会将JVM堆中的数据拷贝一份到直接内存,也就是用户态到内核态的拷贝。使用直接内存并配合其他技术(mmap、sendfile)可实现零拷贝。
3. 进程间的共享
4. 堆,受限于虚拟机,直接操作1TB的内存更适合用直接内存
直接内存有什么限制
1. 不好控制,出现内存泄漏很难排查
2. 相对于堆,不适合存储复杂对象