mmap java_为什么java对socket没有mmap操作?

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())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值