Java NIO 第一章 介绍(2)
来源:互联网 发布:库里2.5孙悟空淘宝 编辑:程序博客网 时间:2024/05/01 12:35
1.2 没有CPU限制
从某些程度上说,可以原谅Java程序员将主要精力放在CPU效率上的优化而没有对IO效率做过多的考虑。在Java早期,Java虚拟机解释字节码是很少甚至不对字节码做运行时优化的。这就意味着那时候Java程序比本地编译过的代码运行的慢得多,也很少需要调用操作系统的IO子系统。
但是运行时优化已经有了极大的进步。现在的虚拟机对字节码的执行速度可以与本地编译的代码相提并论,有时候因为动态运行时优化做的足够好,它甚至比本地代码更快。这意味着大多数Java程序不受CPU的限制,反而经常受到IO的限制。
大多数情况下,如果考虑到操作系统并不是一直传递数据来使Java程序忙碌,那对Java程序来说IO也不是没有限制。但是,Java虚拟机现在并没有高效的使用IO。操作系统的IO结构和Java基于流的IO模型存在着一定的不匹配性。操作系统喜欢在DMA硬件的帮助下使用大的块来传递数据。而Java虚拟机的操控类却喜欢使用像少许字节、几行文本这样小块数据。也就是说当操作系统传递给虚拟机包括大量数据的一个缓冲区时,java.io包中的stream类将这些数据花了大量的时间分解成小块,通常还伴随着复制这些小块到许多由对象组成的抽象层。打个比方,操作系统使用卡车运输数据,然后java.io的stream类将数据用铲子铲下来。NIO可以使卡车立即返回,而直接使用卸下来的数据(一个叫做ByteBuffer的对象就可以做到这样)。
也不是说传统的IO模型就没有传送大量数据的可能。它过去能,现在也一样能。如果你坚持使用基于数组的read()和write()方法,特别是像RandomAccessFile的类也会非常的高效。虽然这些基于数组的方法非常接近操作系统的系统调用(System-Call),但是也必须至少复制一次缓冲区。
就像表1-1列举的一样,如果你发现你的代码大部分时间在等待IO,那么你就要考虑优化IO性能了。否则你那些精心雕琢的代码大部分时间都处于空闲状态。
- Java NIO 第一章 介绍(2)
- Java NIO 第一章 介绍(1)
- Java NIO 第一章 介绍(3)
- Java NIO 第一章 介绍(4)
- Java NIO 第一章 介绍(5)
- Java NIO 第一章 介绍(6)
- Java NIO 第一章 介绍(7)
- Java NIO 第一章 介绍(8)
- 《Java NIO》之第一章 简介
- 读书笔记-《Java NIO》 : 第一章 简介
- java nio SocketChannel (聊天功能)+NIO介绍
- java nio介绍
- java的NIO介绍
- Java NIO介绍
- Java NIO介绍(一)
- Java NIO介绍(二)
- Java NIO介绍(三)
- Java NIO详细介绍
- Java NIO API详解
- MeeGo移动终端设备开发UI设计基础教程
- 一个有趣的原型软件Balsamiq Mockups
- 导出Excel (Page帮助方法)
- checkbox - 显示问题
- Java NIO 第一章 介绍(2)
- Posix线程编程指南(2)
- android Dialog 监听返回事件(back)
- 作品
- linux看进程,杀进程(菜鸟手扎)
- 用JScript ActiveXObject ,打开word时 显示“word无法启动转换器mswrd632 wpc”
- Self Introduction-----李金平
- 如何刪除richtextbox最後一行
- Windows工具箱活动目录与网络系列(二)