mmap(一种内存映射文件的方法)_百度百科baike.baidu.com
这个问题吧,没有官方答案。
我认为:是设计思想不一致导致的。
在C语言中,一切都是文件。包括file,link,socket,pipe等等,都可以通过open打开,都可以read或者write。所以可以有mmap这个东西,把所有的一切(包括且不限于file,socket.memory,memory的memory,块设备,摄像头,蓝牙驱动,键盘)等等的 全部映射为文件。
而java也是有mmap的,但是用在你看不见的地方,例如在JVM中内存的扩展,就是通过新malloc一块内存,然后通过mmap映射到一块虚拟的内存空间,最后形成了在JVM中“空间连续的堆”
而java的NIO里的channel,只是模拟和仿造了这个C语言底层的mmap函数,但仅限于FileChannel,其他的:link,块设备,pipe的。。。。一切都是不支持的
另外,Java思想上,一切都是对象。这对于java来说已经够用了,对象可读可写,对于socket来说已然够用,性能上或者内核空间上也没有太大差距,所以没必要实现了。
因此我觉得,是设计思想不一致而导致的。
一个是:一切都是文件(因此可以有mmap)
二个是:一切都是对象(因此可以有object.get())