第一章的内容大致翻阅了一下感觉还是挺多的,大致都是关于Java的特点、发展史、Java未来的走向以及阅读OpenJDK源码的指导。对于第一章的内容我也准备做一些总结,以备以后的扩充和温故。
Java的特性和优点
提升了开发效率
- 结构严谨,面向对象
- 摆脱硬件束缚,“一次编写,到处运行”
- 相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题(内存回收机制)
- 热点代码检测和运行时编译及优化,运行次数越多性能越好
- 完善的应用程序接口(第三方类库)
Java的技术体系
Sun公司所定义的Java技术体系包括以下几个组成部分:
- Jav程序设计语言
- 各种硬件平台上的Java虚拟机
- Class文件格式(面向对象的载体)
- Java API库(Java自带可调用的库)
- 来自商业机构和开源社区的第三方Java类库(封装好的库)
JDK(Java Development Kit):1+2+4,也就是支持Java开发的最小环境。
JRE(Java Runtime Environment):JavaSE(Java Standard Edition)的API+虚拟机。
Java技术体系模块图:
按照技术服务领域划分,Java技术体系可以分为4个平台:
- JavaCard:支持一些Java小程序运行在小内存设备上的平台,如智能卡
- JavaME(Micro Edition):支持Java运行在移动终端上的平台,对JavaAPI有所精简,并加入了针对移动端的支持
- JavaSE(Standard Edition):支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API。
- JavaEE(Enterprise Edition):支持使用多层架构的企业应用(如ERP、CRM应用)的Java平台,对JavaSE API做了大量的扩充并提供相关的部署支持
入门版(Card)👉阉割版(ME)👉标配(SE)👉Pro(EE)
Java发展史
- 1991年,提出绿色项目(猜想可能是针对c/c++中的垃圾回收,内存处理之类的问题而提出的一个更友好的语言概念);
- 创立oak(java语言的前身,为了解决家用电器的通信问题而诞生,没有理想市场,不久后将要失败);设计出硬件原型;同时设计出注释器。
- 1992年,更名为java; Star-Seven Prototype(七星原型,度娘上查了好久没找到,有机会去翻墙再查吧。 猜想可能是当时那个版本的七大基本规范吧。。。先记下来);
- 1993年,TV Set-top Box ( 可能是在电视机顶盒 试用吧);发布应用开发平台。。
- 1994年,LiveOak(可能是oak发展有一些起色的意思吧。英语不好真的很忧伤。);发布Era浏览器;继而发布HotJava浏览器;设计出java编译器;
- 1995年,正式注册java,并相继获得Netscape,Oracle,Microsoft的支持,HotJava进一步发展。
- 1996年,java1.0发布。
- 1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
- 1997年,java1.1发布。
- 1997年9月,JavaDeveloperConnection社区成员超过十万 。
- 1998年2月,JDK1.1被下载超过2,000,000次
- 1998年,java1.2发布。
- 1998年12月8日,JAVA2企业平台J2EE发布。
- 1999年6月,SUN公司发布Java的三个版本:标准版、企业版和微型版(J2SE、J2EE、J2ME)
- 2000年,java1.3发布。
- 2002年,java1.4发布,自此Java的计算能力有了大幅提升。
- 2004年,java5.0发布,J2SE1.5发布,是Java语言的发展史上的又一里程碑事件。为了表示这个版本的重要性,J2SE1.5更名为J2SE5.0
- 2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名以取消其中的数字“2”:J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME。
- 2006年,java6.0发布,并半开源。
- 2010年,Oracle收购Sun公司,苹果不再支持java
- 2011年,java7.0发布。
- 2014年,java8.0发布。
Java虚拟机发展史
- Sun Classic/Exact VM(初代):世界上第一款商用Java虚拟机,Sun公司研发,主要特点:慢。
- Sun HotSpot VM(新技术):目前使用范围最广的虚拟机,是Sun从一家名为Longview Technologies公司收购来的。主要特点:热点探测技术。
- Sun Mobile-Embedded VM/Meta-Circular VM(探索):面对移动嵌入式市场的探索
- BEA JRockit /IBM J9 VM(其它公司):当时号称”世界上最快的Java虚拟机”
- Azul VM/BEA Liquid VM(特定硬件):高性能Java的武器,特定硬件可以最大限度地发挥硬件的能力,提升Java程序的执行能力。
- Apache Harmony/Google Android Dalvik VM(高速发展):安卓虚拟机。是Android平台的核心组成部分之一。
- Microsoft JVM(彩蛋):2333
Java的未来
- 模块化:说起来也就是解除功能模块和功能模块之间的耦合,降低系统维护消耗。(书上也没仔细说,大家看着标题脑补一下也就知道是干嘛的)
- 混合语言:对系统来说是好事(因为不同语言有不同语言的特点 也就是擅长的地方),但是对于Java程序员的要求也会因此而提高。
- 多核并行:顺应发展
- 丰富语法:更新JDK版本
- 64位虚拟机:现在64位虚拟机速度没有32位快,主要是Java EE对64位虚拟机的要求比较急迫。
自己编译JDK
想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK,通过阅读和跟踪调试JDK源码去了解Java技术体系的原理,虽然门槛会高一点,但肯定会比阅读各种书籍、文章更加贴近本质。另外,JDK中很多底层方法都是本地化的,需要跟踪这些方法的运作或对JDK进行Hack的时候,都需要自己编译一套JDK。
OpenJDK源码结构图:
1 | ├─agent Serviceability Agent的客户端实现 |