我试图了解DirectByteBufferLinux 上的工作原理并编写了以下非常简单的程序以在 strace 下运行:
public static void main(String[] args){
while(true){
ByteBuffer buffer = ByteBuffer.allocateDirect(8192);
}
}
我期望实际上一些mmap或sys_brk系统调用直接从操作系统分配内存,但实际上它只是设置了请求页面的读写保护。我的意思是这样的:
mprotect(0x7fa9681ef000, 8192, PROT_READ|PROT_WRITE) = 0
这似乎是分配直接缓冲区比分配堆缓冲区慢的原因,因为每次分配都需要系统调用。
如果我错了,请纠正我,但堆缓冲区分配(如果发生在 TLAB 内)相当于返回一个指向预分配堆内存的指针。
问题:为什么我们不能对直接内存做同样的事情?返回一个指向预分配内存的指针?
RISEBY
相关分类