Java NIO 第一章 介绍(2)
2010-09-30 14:34
162 查看
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程序员将主要精力放在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 第一章 介绍(3)
- Java NIO 第一章 介绍(7)
- Java NIO 第一章 介绍(1)
- Java NIO 第一章 介绍(6)
- Java NIO 第一章 介绍(5)
- Java NIO 第一章 介绍(4)
- Java NIO 第一章 介绍(8)
- CS231n 2016 通关 第一章-内容介绍
- 【吼吼睡cocos2d学习笔记】第一章 - 介绍cocos2d
- Netty In Action中文版 - 第一章:Netty介绍
- PeopleSoft学习-第一章 应用环境介绍
- 第一章 介绍
- [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍
- [置顶] 《现代密码学》第一章——经典密码学介绍
- 函数指针 详解 (第一章 函数指针介绍)
- 【学习笔记】Thinking in java (第三版)第一章 对象的介绍(Introduction to objects)
- [转]第一章 XML介绍
- maven的概念之功能介绍(第一章)
- java NIO(十) 缓冲区——compact方法介绍
- Hadoop教程 第一章:教程介绍