Java历史

起因

接下来要写一个JVM系列,原因是这样的:
几个月前买了本我深以为目前为止读到的最好的Java书 - - - ->《深入理解Java虚拟机》- 周志明著,翻阅了一会儿之后我已经被此书折服了!作者思路清晰、行文逻辑性强且能由浅入深条条到来,绝对是每个初学者必读之书啊!我几乎说不出此书的缺点,大赞!
在这里记录下我学到的东西并有自己的引申解释,如果能顺便为其他人带来帮助,再好不过。另外,推荐读者能去买个原著去读一下

1. 概述

Java很流行,虽然她已经21岁了,事实上C语言系列从诞生以来一致都长盛不衰,72年的C、83年的C++、95年的Java以及2000年的C#。

TIOBE排行榜,这个排行版我现在能看到的是2016年March的:
Java历史_第1张图片
Java历史_第2张图片

1.1 相关历史

  1. 我的理解是:一个新语言诞生的原因无外乎就是

    1. 以前的某个语言太过复杂、难用,而我要发明一个新的语言来简化开发、提高生产效率;
    2. 随之时代的发展,编程语言需要承载新的思想、架构和技术而老的语言无法承载或不能很好的承载。
  2. 按照这个原因,我们就可以得出Java之所以会但诞生和发展的如此壮大的原因是:

    1. 面相对象编程思想的发展
    2. 其它语言太难用(难用,不是学不会):
      C被创建在遥远的1972年,那时候会编程的都是对计算机极其热爱的人(就是说水平很高)他们使用的是机器语言、汇编语言以及B语言,而且C语言与UNIX操作系统的协同发展的,所以这就要求了:

      C语言的开发者必须很懂计算机,会自己管理好内存

      (C++基本上是C的超集,也是比较难用)
      注意这里说的是难用,是说设计者认为使用C语言的人应该会自己计算内存的分配、释放、大小和位置等等,但是这些其实会影响开发人员的效率,因为这些是与业务无关的内容。

1.2 诞生历史

百度百科中有介绍,直接点击查看


2. Java技术体系

2.1 功能上来划分体系

从广义上说,Clojure、JRuby、Groovy等运行在JVM上的语言及其相关程序都属于Java技术体系的一员。但从传统意义上来说,Sun官方定义的Java技术体系包括以下5部分:

  1. Java程序设计语言
  2. 各种JVM
  3. Class文件格式
  4. Java API类库
  5. 来自商业机构和开源社区的第三方类库

其中,被称为JDK的是下面3部分,JDK是用于支持Java程序开发的最小环境:

  1. Java语言
  2. JVM
  3. Java API

另外,可以把以下两部分称为JRE,JRE是支持Java程序运行的最小环境:

  1. Java SE API(Java API的SE子集)
  2. JVM

2.2 业务领域来划分体系

可以划分为4个平台

  1. Java Card
    支持一些小的Java程序(如Applets)运行在小内存设备(如智能卡)上的平台
  2. Java ME
    Micro Edition,支持Java程序在移动端(手机、PAD)上的平台。对Java API有所精简,并加入了针对移动端的支持,以前称为J2ME
  3. Java SE
    Standard Edition,支持面向桌面级应用(Windows、Linux下的应用程序)的平台,提供了完整的Java SE API,以前称为J2SE
  4. Java EE
    Enterprise Edition,支持使用多层架构的企业应用(如ERP、CRM应用)的Java平台,除了提供Java SE API外,还对其做了大量的扩充(大部分javax.*的包名),这个版本以前称为J2EE

3. Java发展史

  1. 1990年12月,SUN公司的一个项目计划让工程师们开发面向消费型电子产品的程序,但工程师开发终觉得C语言以及其API极其难用,随后他们决定开发一个基于C语言的下一代面向对象语言。到了1992年,这个秘密工程终于能够演示一部分了,他被叫做Oak语言。但随着万维网的发展,团队将Oak的应用目标对准了万维网。因为商标原因Oak改名为Java。
  2. 1995年正式发布Java1.0,以及HotJava浏览器。
  3. 1996年1月,第一个JDK - JDK1.0发布,提供了一个纯解释执行的JVM(Sun Classic VM)
    • 代表技术:JVM、Applet、AWT
  4. 1996年4月,10个最主要的OS供应商申明将在其产品中嵌入Java技术。5月底在San Francisco举行了首届Java One大会
  5. 1997年2月19日,JDK1.1发布
    • 代表技术:JAR格式、JDBC、JavaBean、RMI
    • 语法:内部类、反射
  6. 1998年12月4日,JDK1.2发布
    • Sun把Java技术体系拆分为3个部分,J2SE、J2EE和J2ME
    • 代表技术:EJB、Java Plug-in、Java IDL、Swing
    • JVM第一次内置了JIT(Just In Time)编译器;JDK1.2中有3个JVM并存Classic VM、HotSpot VM和Exact VM,其中只有Classic VM只能外挂使用JIT,而Exact使用在Solaris上
    • 语法:strictfp关键字、Collections集合类
  7. 1999年4月27,HotSpot VM正式发布,他源于一家被Sun收购的公司所开发。JDK1.2将其作为附加程序,JDK1.3之后将其作为所有版本JDK默认JVM。
  8. 2000年5月8号,JDK1.3(Kestrel)发布,从JDK1.3开始,JDK主版本都以动物命名,小版本以昆虫命名
    • 改进:JNDI从扩展升级为平台级服务、使用CORBA IIOP实现RMI的通信协议、增加很多Java 2D API、增加javaSound类库
  9. 2002年2月13日,JDK1.4(Merlin)发布,JDK1.4是Java真正走向成熟成为稳定解决方案的版本
    • 新技术:正则表达式、NIO、日志类、XML解析器、XSLT转换器
  10. 2002年Microsoft .NET Framework平台发布了,虽然看似与Java无关,但随后的日子里,这两个平台相互影响、借鉴、竞争和被比较深刻影响了Java的发展
  11. 2004年9月30日,JDK1.5(Tiger)发布,JDK1.5以及之后的版本号分为两种名字,一个是程序员使用的开发版本号:继续使用1.X,另一个是公开版本号使用JDK5、6、7等命名
    • 语法易用性(语法糖):自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环
    • API:提供了java.util.concurrent并发包
  12. 2006年12月11日,JDK1.6(Mustang)发布
    • 修改技术体系名字:Java SE 6、Java EE 6、Java ME6
    • 改进:提供动态语言支持(内置Mozilla Javascript Rhino引擎实现)、提供编译API、微型HTTP服务器API
  13. 2006年11月13日的JavaOne大会上,Sun宣布要最终开源Java,并在随后的一年多内,陆续将JDK的各个部分在GPL v2协议下公开了源码,并建立了OpenJDK组织对源码进行独立管理。之后的Sun JDK和OpenJDK除了代码文件头注释等部分外,代码基本完全一样。
  14. 2009年4月20日,Oracle74亿Dollar收购了Sun
    • 由于Oracle之前已经收购了BEA,自此Oracle拥有了3大商业JVM(另一个是J9)中的两个:JRockit和HotSpot。Oracle在JDK1.8已经将JRockit好的东西合并到了HotSpot上了,JRockit最后只走到了JDK1.6
  15. 2011年7月28日,JDK1.7(Dolphin)发布
    • 特性:加强对非Java语言的支持、升级class loader架构
    • GC新的垃圾收集器G1(Garbage-First):带来更小的中断时间,有希望替代CMS(Concurrent mark sweep)GC
    • 支持Mac OS X 操作系统、支持ARM指令集架构
  16. 2014年3月18日,JDK1.8发布
    • 技术:Lambdas表达式

4. JVM发展史

这里主要介绍面向桌面和服务器的商用虚拟机。其实除此之外还有面向移动和嵌入式市场的VM,以及研究用的VM,这里都不介绍了

  1. Sun Classic
    • JDK1.0时Sun的官方/世界上第一款商用虚拟机,但现在它的使命已经终结,最后版本JDK1.3
    • Classic只能使用纯解释器方式来运行class代码,如果想使用JIT编译器就必须进行外挂。但是加入外挂了JIT那么解释器就不工作了
  2. Exact VM
    • 仅在JDK1.2时在Solaris平台存在过,已经有现代高性能虚拟机的雏形
    • 后来再与HotSpot在公司内部的争论中失败
  3. HotSpot VM
    • 现在Sun JDK和OpenJDK所带JVM,是正统和运用最广泛的VM,收购自一家小公司
    • 最重要的就是热点HotSpot代码探测技术
  4. BEA JRockit VM
    • 专注服务器领域,所以没有解释器,只有编译器
    • 先进的垃圾收集器和MissionControl服务套件。
    • 现在已被Sun(Oracle)收购,Oracle在JDK1.8已经将JRockit好的东西合并到了HotSpot上了,JRockit最后只走到了JDK1.6
  5. IBM J9 VM
    • 主要作为IBM公司Java产品的平台,与其产品联合使用效果好,如:WebSphere

最后附上一个官方的Java语言和JVM规范的地址:
Java Language and Virtual Machine Specifications


参考文献:

[ 1 ] 周志明.深入理解Java虚拟机[M].第2版.北京:机械工业出版社,2015.8.
[ 2 ] 网络资料.

你可能感兴趣的:(JVM,Java)