Pagecache和Buffercache

基本概念

Page cache(页面缓存)
页缓冲或文件缓冲

Buffer cache(块缓存)
块缓冲,是对物理磁盘上的一个磁盘块进行的缓冲

Swap space(交换空间)
虚拟内存的表现形式。系统为了应付一些需要大量内存的应用,而将磁盘上的空间做内存使用

DMA(Direct Memory Access,直接存储器访问)

零拷贝

用户态与内核态的数据拷贝的次数为零(不使用流拷贝,使用指针,文件和进程虚拟地址空间映射)
linux底层 sendfile和mmap

java

alt

ByteBuffer申请的堆外内存也是由GC负责回收的,Hotspot在GC时会扫描Direct ByteBuffer对象是否有引用,如没有,当堆内的引用被gc回收时通过虚拟引用回收其占用的堆外内存

但是堆内可能只是一个对象引用的内存占用,不至于GC,导致堆外内存占用大,而堆内不需要GC。

堆外内存使用框架

Ehcache

参考

https://blog.csdn.net/daijiguo/article/details/106457319
https://zhuanlan.zhihu.com/p/161939673
https://juejin.cn/post/6844903744115572749

Java堆外内存使用
https://blog.csdn.net/qq_40977118/article/details/10812443
https://blog.csdn.net/liuxiao723846/article/details/89814005

Spring Boot引起的“堆外内存泄漏”排查及经验总结
https://tech.meituan.com/2019/01/03/spring-boot-native-memory-leak.html