JDK 1.4版本(包括之后的版本)最显著的新特性就是增加了NIO(New IO),能够以非阻塞的方式处理网络的请求,这就使得在Java中只需要少量的线程就能处理大量的并发请求了。但是使用NIO不是一件简单的技术,它的一些特点使得编程的模型比原来阻塞的方式更为复杂。
在JDK 1.4的新特性中,NIO无疑是最显著和鼓舞人心的。NIO的出现事实上意味着Java虚拟机的性能比以前的版本有了较大的飞跃。在以前的JVM的版本中,代码的执行效率不高(在最原始的版本中Java是解释执行的语言),用Java编写的应用程序通常所消耗的主要资源就是CPU,也就是说应用系统的瓶颈是CPU的计算和运行能力。在不断更新的Java虚拟机版本中,通过动态编译技术使得Java代码执行的效率得到大幅度提高,几乎和操作系统的本地语言(例如C/C++)的程序不相上下。在这种情况下,应用系统的性能瓶颈就从CPU转移到IO操作了。尤其是服务器端的应用,大量的网络IO和磁盘IO的操作,使得IO数据等待的延迟成为影响性能的主要因素。NIO的出现使得Java应用程序能够更加紧密地结合操作系统,更加充分地利用操作系统的高级特性,获得高性能的IO操作。
JIT Compiler(Just-in-time Compiler) 即时编译 最早的Java建置方案是由一套转译程式(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。 针对这个问题,业界首先开发出JIT(just in time)编译器。当Java执行runtime环境时,每遇到一个新的类别(class:类别是Java程式中的功能群组),类别是Java程式中的功能群组-JIT编译器在此时就会针对这个类别进行编译(compile)作业。经过编译后的程式,被优化成相当精简的原生型指令码(native code),这种程式的执行速度相当快。花费少许的编译时间来节省稍后相当长的执行时间,JIT这种设计的确增加不少效率,但是它并未达到最顶尖的效能,因为某些极少执行到的Java指令在编译时所额外花费的时间可能比转译器在执行时的时间还长,针对这些指令而言,整体花费的时间并没有减少。 基于对JIT的经验,业界发展出动态编译器(dynamic compiler),动态编译器仅针对较常被执行的程式码进行编译,其余部分仍使用转译程式来执行。也就是说,动态编译器会研判是否要编译每个类别。动态编译器拥有两项利器:一是转译器,另一则是JIT,它透过智慧机制针对每个类别进行分析,然后决定使用这两种利器的哪一种来达到最佳化的效果。动态编译器针对程式的特性或者是让程式执行几个循环,再根据结果决定是否编译这段程式码。这个决定不见得绝对正确,但从统计数字来看,这个判断的机制正确的机会相当高。事实上,动态编译器会根据「历史资料」做决策,所以程式执行的时间愈长,判断正确的机率就愈高。以整个结果来看,动态编译器产生的程式码执行的速度超越以前的JIT技术,平均速度可提高至50%。
分享到:
相关推荐
其中,JVM的垃圾回收机制、类加载器的工作原理、即时编译(JIT)策略等都是关键内容。通过研究Hotspot源码,开发者可以更好地优化自己的程序,提升性能,减少内存占用,同时也能更准确地定位和解决问题。 接下来,...
在Java中,NIO(非阻塞I/O)的Buffer类提供了零复制的能力,例如`FileChannel.transferTo()`和`FileChannel.transferFrom()`方法。这些方法可以将数据直接从文件通道传输到网络通道,而无需经过用户空间的缓冲区,...
Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现为甲骨文公司的一部分)...6. **高性能**:虽然Java是一种解释执行的语言,但通过即时编译器(JIT)技术,Java程序可以接近或达到与编译语言相当的性能。
在Java高级程序设计中,还需要掌握其他重要概念,如泛型、注解、反射、IO流、NIO(非阻塞I/O)、并发控制(synchronized、volatile、Lock接口等)、集合框架的高级用法、设计模式、JVM优化等。这些知识点在实际开发...
"sun.net"和"sun.nio"包包含了Java网络编程的底层实现,如`sun.nio.ch`包下的Socket和Channel的实现,提供了对低级I/O操作的访问。 6. **安全**: "sun.security"包提供了安全管理器、证书、密钥和加密算法的实现...
了解哪些代码会被JIT编译,以及如何使用-XX:+PrintCompilation观察JIT编译情况,有助于优化。 8. **性能监控**:使用工具如VisualVM、JProfiler、Arthas等进行性能分析,可以发现程序中的瓶颈,指导优化方向。 9. ...
JIT(Just-In-Time)编译器也得到了优化,能够更智能地识别并编译频繁执行的热点代码,进一步提升运行效率。 在国际化和本地化方面,Java 6.0加强了对不同语言和文化环境的支持,包括日期、时间、货币格式等,使得...
在JDK8中,JVM进行了优化,包括改进的垃圾收集器(如G1垃圾收集器)和更快的编译器(如JIT即时编译器)。通过阅读源代码,我们可以了解到JVM如何高效地管理和调度内存,以及如何优化运行时性能。 二、并发编程 JDK8...
JDK 1.4的编译器和虚拟机进行了优化,包括对Java代码的即时编译(JIT)优化,以及对多线程支持的改进,显著提高了应用程序的执行效率和响应速度。 #### 8. **新特性与APIs** JDK 1.4还引入了一系列新的APIs和特性...
6. **IO与NIO**:理解传统的IO模型和非阻塞IO(NIO)的区别,熟悉Java NIO的Channel、Buffer、Selector等概念,能有效地提高数据传输性能。 7. **JNI与Native方法**:当Java代码无法满足性能需求时,可能需要借助...
9. **I/O与NIO**:介绍Java的输入输出系统,包括传统I/O和非阻塞I/O(New I/O,NIO)的原理和应用。 10. **网络编程**:讲解Socket通信和HTTP协议的Java实现。 CH_00-导读部分通常会概述全书的学习目标、适用人群...
8. **Java I/O和NIO**:Java的标准I/O库处理输入输出,而NIO(非阻塞I/O)则提供了更高效的读写方式,适用于高并发场景。 9. **JavaFX**:JavaFX是用于创建桌面和基于浏览器的富客户端应用程序的平台,提供丰富的...
- 学习Java源代码如何通过编译器转化为字节码,了解字节码指令集,以及JIT(Just-In-Time)编译器的作用。 - 探索动态编译和优化,如热点代码探测和即时编译,提高程序运行效率。 3. **多线程与并发** - 分析...
- **JIT编译器的改进**:增强了即时编译器的功能,提高了代码执行效率。 - **垃圾回收器的改进**:引入了新的并行压缩收集器(G1),该收集器可以在不增加停顿时间的情况下处理更大的堆内存。 ##### 2.3 新API介绍 ...
Java的JIT(Just-In-Time)编译器可以实现这一点,它能够提升程序的运行效率,通过实时编译热点代码来优化性能。 2. **动态加载**:Java的ClassLoader机制允许程序在运行时动态地加载类,这增强了软件的灵活性和可...
这主要得益于JVM(Java虚拟机)的优化,包括垃圾回收机制、多线程支持和Just-In-Time(JIT)编译器等。JIT编译器能够在运行时将频繁执行的热点代码编译为原生机器码,提高执行效率。此外,Java的并发库,如...
通过回顾Java的发展历程以及详细介绍Java 9的新特性,我们可以看出Java语言一直在不断进步,旨在提高开发者的生产力和应用程序的性能。模块化系统的引入尤其值得一提,它为Java的应用场景带来了革命性的变化,使其...
8. **JIT编译器**:介绍JVM的即时编译器,如何将字节码转换为高效的机器代码。 这两本书是Java开发者进阶的必备读物,通过学习,读者不仅可以提高编程能力,还能更好地理解Java平台的底层机制,从而在实际工作中...
5. **字节码执行**:JVM如何解释和执行字节码,以及Just-In-Time(JIT)编译器的角色。 6. **异常处理**:Java中的异常是如何抛出、捕获和处理的,以及与C++异常处理的区别。 7. **类文件结构**:.class文件的组成,...
Java的发展历程始于1995年,伴随着众多技术的引入和版本的更新,包括AWT、JDBC、JavaBeans、JDK1.1、J2SE、泛型、NIO、JMX等,每一次技术的更新都对JVM和Java程序的执行效率和功能产生了重大影响。OpenJDK的出现使得...