1 Java 的优点
- 结构严谨、面向对象
- 摆脱平台的束缚,一次编写到处运行
- 提供了相对安全的内存管理和访问机制
- 实现了热点代码检测和运行时编译及优化
- 一套完善的应用程序接口以及无数的第三方类库
2 Java 技术体系
Sun 官方所定义的 Java 技术体系包括:
- Java 程序设计语言
- 各种硬件平台上的 Java 虚拟机
- Class 文件格式
- Java API 类库
- 来自商业机构和开源社区的第三方 Java 类库
JDK 是用于支持 Java 开发的最小环境,JRE是支持 Java 程序运行的标准环境,整个 Java 体系如下所示:
3 Java 发展史
- JDK 1.0: Java 虚拟机、Applet、AWT 等;
- JDK 1.1:JAR 文件格式、JDBC、JavaBeans、RMI、内部类、反射;
- JDK 1.2:拆分为 J2SE/J2EE/J2ME、内置 JIT 编译器、一系列 Collections 集合类;
- JDK 1.3:JNDI 服务、使用 CORBA IIOP 实现 RMI 通信协议、Java 2D 改进;
- JDK 1.4:正则表达式、异常链、NIO、日志类、XML 解析器和 XSLT 转换器;
- JDK 1.5:自动装箱、泛型、动态注解、枚举、可变参数、遍历循环、改进了 Java 内存模型、提供了 java.util.concurrent 并发包;
- JDK 1.6:提供动态语言支持、提供编译 API 和微型 HTTP 服务器 API、虚拟机优化(锁与同步、垃圾收集、类加载等);
- JDK 1.7:G1 收集器、加强对 Java 语言的调用支持、升级类加载架构;
- JDK 1.8:Lambda 表达式等;
4 Java 虚拟机发展史
- Sun Classic/Exact VM
Classic VM 是第一款商用虚拟机,纯解析器方式来执行 Java 代码,如果要使用 JIT 编译器就必须进行外挂,解析器和编译器不能配合工作,编译器执行效率非常差;Exact VM 是 Sun 虚拟机团队曾在 Solaris 平台发布的虚拟机,支持两级即时编译器、编译器和解释器混合工作、使用准确内存管理(虚拟机可以知道内存中某个位置的数据具体是什么类型),但很快就被 HotSpot VM 所取代; - Sun HotSpot VM
Sun JDK 和 OpenJDK 所带的虚拟机,目前使用范围最广;继承了前两款虚拟机的优点,还支持热点代码探测技术(通过计数器找出最具编译价值的代码);2006 年 Sun 公司宣布 JDK 包括 HotSpot VM 开源,在此基础上建立 OpenJDK; - Sun Mobile-Embedded VM/Meta-Circular VM
还有一些 Sun 开发的面对移动和嵌入式发布的和实验性质的虚拟机; - BEA JRockit/IBM J9 VM
JRockit VM 号称是世界上最快的 Java 虚拟机,专注于服务器端应用,不包含解析器实现,全部靠即时编译器编译执行;J9 VM 定位于 HotSpot 比较接近,主要目的是作为IBM公司各种 Java 产品的执行平台; - Azul VM/BEA Liquid VM
特定硬件平台专有的高性能虚拟机; - Apache Harmony/Google Android Dalvik VM
Apache Harmony 包含自己的虚拟机和 Java 库,但没有通过 TCK 认证;Dalvik VM 是 Android 平台的核心组成部分,其并没有遵循 Java 虚拟机规范,不能直接执行 Class 文件,使用的是寄存器架构而不是 JVM 常见的栈架构; - Microsoft JVM 及其他
微软曾经是 Java 技术的铁杆支持者,开发过 Windows 下性能最好的 Java 虚拟机,但后来被 Sun 起诉终止其发展;
5 展望 Java 技术的未来
- 模块化
- 混合语言
- 多核并行
- 进一步丰富语法
- 64 位虚拟机
6 实战:自己编译 JDK
6.1 实战:自己编译 JDK
- 下载 OpenJDK:https://jdk7.java.net/source.html
- 系统需求:Ubuntu 64位、5 GB 的磁盘、1 G 内存;
- 构建编译环境:需要 Bootstrap JDK(JDK 6 以上)/Ant(1.7.1 以上)/GCC。
sudo apt-get install build-essential gawk m4 openjdk-6-jdk libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant
- 进行编译:设置环境变量、make sanity 检查、make 编译、复制到 JAVA_HOME、编辑 env.sh
6.2 在 IDE 工具中进行源码调试
NetBeans(支持C/C++开发的版本)
7 本章小结
本章介绍了 Java 技术体系的过去、现在以及未来的一些发展趋势,并独立编译一个 OpenJDK 7 的版本。