首页 > 代码库 > JVM--走进Java

JVM--走进Java

1.1 概述

  1) Java 能获得如此广泛的认可,除了他拥有一门结构严谨,面向对象的编程语言之外,还有许多不可忽视的有点:Java 摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想;他提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题;他实现了热点代码检测和运行时编译及优化,这使得 Java 应用能随着运行时间的增加而获得更高的性能;他有一套完整的应用程序接口,还有无数来自商业结构和开源社区的第三方类库来帮助他实现各种各样的功能。

 

1.2 Java技术体系

  1) 从广义上讲,Clojure、Jruby、Groovy 等运行于 Java 虚拟机上的语言及其相关的程序都属于 Java 技术体系中的一员。

      如果从传统意义上来看,Sun 官方所定义的 Java 技术体系包括以下几个部分:

      Java 程序设计语言

      各种硬件平台上的 Java 虚拟机

      Class 文件格式

      Java API 类库

      来自商业机构和开源社区的第三方 Java 类库

  2) 我们可以把 Java 程序设计语言、Java 虚拟机、Java API 类库这三部分统称为 JDK(Java Development Kit),JDK是用于支持 Java 程序开发的最小环境。另外,可以把 Java API类库中的 Java SE API 子集和 Java 虚拟机这两部分统称为 JRE(Java Runtime Environment)。JRE 是支持 Java 程序运行的标准环境。

  3) 根据各个组成部分的功能来进行划分,Java 技术体系所包含的内容

技术分享

  4) 根据技术所服务的领域来划分,或者说按照 Java 技术关注的重点业务领域来划分,Java 技术体系可以分为4个平台,分别为:

      Java Card: 支持一些 Java 小程序(Applets)运行在小内存设备(如智能卡)上的平台

      Java ME(Micro Edition): 支持 Java 程序运行在移动终端上的平台,对 Java API 有所精简,并加入了针对移动终端的支持,这个版本以前称为 J2ME

      Java SE(Standard Edition): 支持面向桌面级应用(如 Windows 下的应用程序)的 Java平台,提供了完整的 Java 核心 API,这个版本以前称为 J2SE

      Java EE(Enterprise Editon): 支持使用多层框架的企业应用(如 ERP、CRM应用) 的Java 平台,除了提供 Java SE API 外,还对其做了大量的扩充并提供了相关的部署支持,这个版本以前称为 J2EE

  

1.3 Java 发展史

  1) Java 技术发展史

版本描述
1991年1月 Sun公司成立了Green项目小组,专攻智能家电的嵌入式控制系统
1991年2月 放弃C++,开发新语言,命名为“Oak”
1991年6月 JamesGosling开发了Oak的解释器
1992年1月 Green完成了Green操作系统、Oak语言、类库等开发
1992年11月 Green计划转化成“FirstPerson”,一个Sun公司的全资母公司
1993年2月 获得时代华纳的电视机顶盒交互系统的订单,于是开发的重心从家庭消费电子产品转到了电视盒机顶盒的相关平台上。
1994年6月 FirstPerson公司倒闭,员工都合并到Sun公司。Liveoak计划启动了,目标是使用Oak语言设计出一个操作系统。
1994年7月 第一个Java语言的Web浏览器WebRunner(后来改名为HotJava),Oak更名为Java。
1994年10月 VanHoff编写的Java编译器用于Java语言
1995年3月 在SunWorld大会,Sun公司正式介绍了Java和HotJava。
1996年1月 JDK1.0发布
1997年2月 J2SE1.1发布
1998年12月 J2SE1.2发布
1999年6月 发布Java的三个版本:J2SE、J2EE、J2ME
2000年5月 J2SE1.3发布
2001年9月 J2EE1.3发布
2002年2月 J2SE1.4发布
2004年9月 J2SE1.5发布,将J2SE1.5改名JavaSE5.0
2005年6月 JavaSE6.0发布,J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME
2006年12月 JRE6.0发布
2006年12月 JavaSE6发布
2009年12月 JavaEE6发布
2009年4月 Oracle收购Sun
2011年7月 JavaSE7发布
2014年3月 JavaSE8发布

  2) 1996年1月23日,JDK 1.0 发布,Java 语言有了第一个正式版本的运行环境。JDK 1.0 提供了一个纯解释执行的 Java 虚拟机实现(Sun Classic VM)。JDK 1.0 版本的代表技术包括:Java 虚拟机、Applet、AWT等。

  3) 1997年2月19日,Sun 公司发布了 JDK 1.1,Java 技术的一些最基础的支撑点(如 JDBC 等)都是在 JDK 1.1版本中发布的, JDK 1.1版的技术代表有:JAR 文件格式、JDBC、JavaBeans、RMI。Java 语法也有了一定的发展,如内部类和反射都是在这个时候出现的。

  4) 1998年4月8日,JDK 迎来了一个里程碑式的版本 JDK 1.2,工程代号为 Playground(竞技场),Sun 在这个版本中把 Java 技术体系拆分为3个方向,分别是面向桌面应用开发的 J2SE(Java 2 Platform, Standard Edition),面向企业级开发的 J2EE(Java 2 Platform, Enterprise Edition)和面向手机等移动终端开发的 J2ME(Java 2 Platform, Micro Edition)。在这个版本中出现的代表性技术非常多,如 EJB、Java Plug-in、Java IDL、Swing 等,并且这个版本中 Java虚拟机第一次内置了 JIT(Just In Time)编译器(Java 1.2中曾并存过3个虚拟机,Classic VM、HotSpot VM 和 Exact VM,其中 Exact VM只在 Solaris 平台出现过;后面两个虚拟机都是内置 JIT 编译器的,而之前版本所带的 Classic VM 只能以外挂的形式使用 JIT 编译器)。在语言和 API 级别上, Java 添加了 strictfp 关键字与现在 Java 编码之中极为常用分一系列 Collection 集合类。

  5) 1999年4月27日,HotSpot 虚拟机发布,HotSpot 最初由一家名为 “Longview Technologies” 的小公司开发,因为 HotSpot 的优异表现,这家公司在 1997 年被 Sun 公司受够了。HotSpot 虚拟机发布时时作为 JDK 1.2 的附加程序提供的,后来他成为了 JDK 1.3 及之后所有版本的 Sun JDK 的默认虚拟机。

  6) 2000年5月8日,工程代号为 Kestrel 的 JDK 1.3发布,JDK 1.3 相对于 JDK 1.2 的改进主要表现在一些类库上(如数学运算和新的 Timer API 等),JNDI 服务从 JDK 1.3 开始被作为一项平台级服务提供(以前 JNDI 仅仅是一项扩展),使用 CORBA IIOP 来实现 RMI 的通信协议,等等。这个版本还对 Java 2D 做了很多改进,提供了大量新的 Java 2D API,并且新添加了 JavaSound 类库。

  7) 2002年2月13日,JDK 1.4 发布,工程代号为 Merlin。JDK 1.4 是 Java 真正走向成熟的一个版本,Compaq、Fujitsu、SAS、Symbian、IBM 等著名公司都有参与甚至实现自己独立的 JDK 1.4。哪怕是在十多年后的今天,仍然有许多主流应用(Spring、Hibernate、Struts等)能直接运行在 JDK 1.4 之上,或者继续发布能运行在 JDK 1.4 上的版本。JDK 1.4 同样发布了很多新的技术特性,如正则表达式、异常链、NIO、日志类、XML 解析器和 XSLT 转换器等。

  8) 2004年9月30日,JDK 1.5 发布,工程代号 Tiger。从 JDK 1.2 以来,Java 在语法层面上的变换一直很小,而 JDK 1.5 在 Java 语法易用性上做出了非常大的改进。例如,自动装箱、泛型、动态注释、枚举、可变长参数、遍历循环(foreach 循环)等语法特性都是在 JDK 1.5 中加入的。在虚拟机和 API 层面上,这个版本改进了 Java 的内存模型(Java Memory Model, JMM)、提供了 java.util.concurrent 并发包等。另外,JDK 1.5 是官方声明可以支持 Window 9x 平台的最后一个 JDK 版本。

  9) 2006年12月11日,JDK 1.6 发布,工程代号 Mustang。在这个版本中,Sun 终结了从 JDK 1.2 开始已经有 8 年历史的 J2EE、J2SE、J2ME 的命名方式,启用 Java SE 6、Java EE 6、Java ME 6 的命名方式。JDK 1.6 的改进包括:提供动态语言支持(通过内置 Mozilla JavaScript Rhino 引擎实现)、提供编译 API 和微型 HTTP 服务器 API 等。同时,这个版本对 Java 虚拟机内部做了大量改进,包括锁与同步、垃圾收集、类加载等方面的算法都有相当多的改动。

  10) 在2006年11月13日的 JavaOne大会上,Sun 公司宣布最终会将 Java 开源,并在随后的一年多的时间内,陆续将 JDK 的各个部分在GPL v2(GNU General Public License v2) 协议下公开了源码,并建立了 OpenJDK 组织对这些源码进行独立管理。除了极少量的产权代码(Encumbered Code,这部分代码大多是 Sun 本身也无权限进行开元处理的)外,OpenJDK 几乎包括了 Sun JDK 的全部代码, OpenJDK 的质量主管曾经表示,在 JDK 1.7中,Sun JDK 和 OpenJDK 除了代码和文件头的版权只是之外,代码基本上完全一样,所以 OpenJDK 7 与 Sun JDK 1.7 本质上就是同一套代码库开发的产品。

  11) JDK 1.7 的主要改进包括:提供新的 G1 收集器(G1 在发布时依然处于 Experimental 状态,直至2014年4月的Update 4中才正式庄正)、加强对非 Java 语言的调用支持(ISR-292,这项特性到目前为止依然没有完全实现定型)、升级类加载架构等。

  12) 2009年4月20日,Oracle 公司收购了 Sun 公司,Java 商标从此正式归 Oracle 所有(Java 本身并不属于那间公司所有,他由 JCP 组织进行管理,尽管 JCP 主要是由 Sun公司或者说 Oracle 公司所领导的)。由于此前 Oracle 公司已经收购了另外一家大型的中间件企业 BEA 公司,在完成对 Sun 公司的收购之后, Oracle 公司分别送 BEA  和 Sun 中取得了目前三大商业虚拟机的其中两个:JRockit 和 HotSpot,Oracle 公司宣布在未来的1~2年的时间将把这两个优秀的虚拟机互相取长补短,最终合二为一。

JVM--走进Java