java.nio - 关于内核空间与用户空间的问题

查看:205
本文介绍了java.nio - 关于内核空间与用户空间的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

看≪深入分析java web技术内幕≫中有这么一句话说NIO direct memory:

ByteBuffer.allocateDirect()分配的内存使用的是本机内存而不是Java堆上的内存,这也进一步说明每次分配内存时会调用操作系统的os::malloc函数。另外一方面直接ByteBuffer产生的数据如果和网络或者磁盘交互都在操作系统的内核空间中发生……

我有如下的三个问题:

  1. 不清楚os::malloc是不是c++语言。如果它是从用户空间分配内存,那么为什么后面说交互都在内核空间中发生?如果它是从内核空间分配内存,为什么与c语言的malloc不一致呢?

  2. java能直接分配、读写内核空间吗?

  3. c语言中可以直接在用户程序中直接或者间接分配以及读写内核空间吗?该如何做?

解决方案

1 allocateDirect()的区别在于这块内存不由java堆管理, 但仍然在同一用户进程内.
"交互都在内核空间中发生"是说read / write等系统调用过程中对这块内存的读写.

2/3. 这问题已经离web编程很远了. 你自己写个系统调用或者用一些不安全的方法可以做到, 但是这不是个正常的需求.

这篇关于java.nio - 关于内核空间与用户空间的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆