Java文件映射[mmap]揭秘
?前言
相信现在做Java的人没有人不用NIO来进行IO相关的操作了吧。这个新的IO类库[虽然现在已经不新了]为我们带来了基于块的IO处理方式,通过预定义的Buffer,我们可以更高效地完成IO操作。在NIO中,我比较关注的是一个成为mmap的文件映射功能,其特点是可以把文件的一部分或全部映射到内存中,之后我们就可以通过MappedBuffer对内存进行操作,而操作的结果会由操作系统负责flush到文件中。由于应用程序只是操作内存,所以处理速度比普通的文件操作快很多,在某些应用场景下mmap可以发挥相当大的作用。本文就来揭秘java的mmap背后的工作原理和实现方法,以及使用java的mmap要注意的一些问题。?
1?????? 功能简析
既然TOP/PS的值已经不可靠了,那么应该怎样获取使用了mmap的进程当前所占用的物理内存呢?google了一下排名最靠前的是一个叫做exmap的工具,不过那个工具不仅自己要重新编译,还需要重新编译内核[因为可能操作系统禁用了Module载入],最不能接受的是还是图形界面的,还有可能造成性能上的不稳定,这些限制使其在开发机上部署和使用变得不现实。后来用尝试了一些系统调用和shell命令,效果都不太理想。
4?????? 后记
我们略带遗憾地结束了Java的Mmap之旅,最终也没能找到一个简单而准确的方法来查看当前进程的占用了多少物理内存[前提是不引入影响系统性能的组件和不引入带界面的东西],如果哪位有更好的办法[无论是应用那个命令或者写个小程序都可以]请通过email联系我jxuedi@gmail.com,您的方法如果证明确实有效我会送您一个45cm的QQ公仔聊表谢意,同时也可以为这篇文章画上一个完满的句号,期待中……