第一部分 走进Java
第1章 走近Java
1.1 概述
优点:
- 摆脱了硬件平台的束缚,实现了“一次编写,到处运行”;
- 提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题;
- 实现了热点代码检测和运行时编译及优化;
- 有一套完善的应用程序接口,还有来自商业机构和开源社区的第三方类库帮助它实现各种各样的功能
当我们在使用一种技术时,如果不再依赖书本和他人就能得到这些问题的答案,那才算上升到了“不惑”的境界。
1.2 Java技术体系
如果仅从传统意义上看,Sun官方所定义的Java技术体系包含以下几个组成部分:
- Java程序设计语言
- 各种硬件平台上的Java虚拟机
- Class文件格式
- Java API类库
- 来自商业机构和开源社区的第三方类库
我们可以把Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境。可以把Java API类库中的Java SE API自己和Java虚拟机这两部分统称为JRE(Java Runtime Enviroment),JRE是支持Java程序运行的标准环境。图1.2展示了Java技术体系所包含的内容,以及JDK和JRE 所涵盖的范围
图1.2 Java技术体系所包含的内容
以上是根据各个组成部分的功能来进行划分的,如果按照技术所服务的领域来划分,分别为:
- Java Card:支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。
- Java ME(Mico Edition):支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API 有所精简,并加入了针对移动终端的支持,这个版本以前称为J2ME。
- Java SE(Standardn Edition):支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,这个版本以前称为J2SE。
- Java EE(Enterprise Edition):支持使用多层架构的企业应用(如ERP、CRM应用)的Java平台,除了提供Java SE API外,还对其做了大量的扩充并提供了相关的部署支持,这个版本以前成为J2EE。
1.3 Java发展史
Java的发展轨迹和历史变迁
1.4 Java虚拟机发展史
1.4.1 Sun Classic/Exact VM
世界上第一款商用Java虚拟机
1.4.2 Sun HotSpot VM
1.4.3 Sun Mobile-Emneded VM/Meta-Circular VM
1.4.4 BEA JRockit/IBM J9 VM
1.4.5 Azul VM/BEA Liquid VM
1.4.6 Apache Harmony/Google Android Dalvik VM
1.5 展望Java技术的未来
1.5.1 模块化
模块化是解决应用系统与技术平台越来越复杂、越来越庞大问题的一个重要途径。
1.5.2 混合语言
1.5.3 多核并行
CPU硬件的发展方向已经从高频率转变为多核心。Fork/Join模式是处理并行编程的一个经典方法,如图1-5
–Fork/Join框架是Java7提供的并行执行任务框架,思想是将大任务分成小任务,然后小任务分别计算出结果,再结合起来,汇总结果作为大任务结果。其思想和MapReduce的思想非常类似。
在JDK外围,也出现了专为满足并行极端需求的框架,入Apache的Hadoop Map/Reduce,能够运行在由上千个商用机器组成的大型集群上,并且能以一种可靠的容错方式并行处理TB级别的数据集。还出现了植入Scala、Clojure及Erlang等天生就具备并行计算能力的语言。
1.5.4 进一步丰富语法
1.5.5 64位虚拟机
开启压缩指针会增加执行代码数量,因为所有在Java堆里的、指向Java堆内对象的指针都会被压缩,这些指针的访问就需要更多的代码才可以实现,而且并不只是读写字段才受影响,在实例方法调用、子类型检查等操作中也受影响,因为对象实例指向对象类型的引用的被压缩了。
1.6 实战:自己编译JDK
1.6.1 获取JDK源码
本次编译实践中,笔者选用的是OpenJDK7u,版本为7u6。
1.6.2 系统需求
笔者选用Ubuntu10.10和MacOS X10.8.2为例进行构建,若读者一定要在Windows上完成编译,可参考附录A。
对系统的最后一点要求就是所有文件、包括源码和依赖项目,都不要放在包含中文的目录里面。
1.6.3 构建编译环境
1.7 本章小结
本章介绍了Java技术体系的过去、现在以及未来的一些发展趋势,并通过实战介绍了如何自己来独立编译一个O喷JDK 7。后面章节将分为4部分去介绍Java在内存管理、Class文件结构与执行引擎、编译器及多线程并发方面的实现原理。
部分内容未列出,需要的知识分子请告知,给您补上(: