服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > JDK > 查看文档

来龙去脉之――j2se发展演变过程


  1.j2se:怀胎
  
  java的历史可以追溯到1991年4月,sun公司的james gosling领导的绿色计划(green project)开始着力发展一种分布式系统结构,使其能够在各种消费性电子产品上运行,他们使用了c/c++/oak语言。由于电子产品种类繁多,运行环境各不相同,使得用这些语言进行开发的软件必须为不同的电子产品而专门设计,所以项目组疲于奔命,消费性电子产品软件环境的发展无法达到预期的目标,绿色计划也陷于停滞状态。
  
  直至 1994年下半年,由于internet的迅猛发展和环球信息网 www的快速增长,第一个全球信息网络浏览器mosaic诞生了;此时,工业界对适合在网络异构环境下使用的语言有一种非常急迫的需求;games gosling决定改变绿色计划的发展方向,他们对oak进行了小规模的改造,就这样,java在1995年的3月23日诞生了!java的诞生标志着互联网时代的开始,它能够被应用在全球信息网络的平台上编写互动性及强的applet程序,而1995年的applet无疑能给人们无穷的视觉和脑力震荡。
  
  但没有相应的开发库而只靠java语言来进行开发肯定是困难重重,所以sun公司在1996年的1月23日发布了jdk1.0来帮助开发人员的开发。jdk包括两大部分:运行环境和开发工具。而运行环境包括五大部分:核心api,集成api,用户界面api,发布技术,java虚拟机(jvm)。java能够在信息网络时代快速发展,得益于它独特的组成结构,它并不直接被编译成所在平台的机器语言然后执行,而是先被编译成字节码,然后才到装有jvm的硬件上运行,所以它能够跨平台运行;而且,不是一定要使用java语言来写程序才能编译成java字节码,我们用c/c++/javascript等语言来写程序也可以编译出jvm要求的字节码文件。在这个时期,人们使用最多的 java api 无疑地就是 awt,因为 jdk 1.0 时只有 awt 称得上是一组完整的 framework,其它 java api 都比较偏向个别的 class。
  
  紧跟着,sun公司在1997年2月18日发布了jdk1.1。jdk1.1相对于旧版本最大的改进,是推出了jit(just-in-time)编译器。传统的jvm收到一道字节码指令后,解释成机器码,马上执行该机器码,然后丢掉该机器码,再接收下一道字节码指令……即便是以前执行过的字节码指令,依然需要重新解释成机器码才能执行。而jit编译器会把常执行的部分先解释好放在内存,以后再次执行该指令时,不用再解释,直接从内存中取出机器码就可以执行了,这样提高了不少的效率。
  
  在jdk1.1时代,java平台分为personaljava与embeddedjava,前者比较适用于运算资源和内存丰富的设备,而资源有限者适用于后者。这样的分类明显不符合时代发展的潮流,所以,java平台处处蕴藏着新的翻天覆地的革命……
  
  2.j2se1.2:诞生
  
  jdk1.2在1998年12月4日的隆重发布,标志着java2平台的诞生。java2的j2se1.2时代是一个大变革时代,它进行了如下的三大革命:
  
  * 市场推广革命
  
  在java1.0或者1.1中,称api库为jdk,但为了方便市场推广,sun公司在java1.2版以后将jdk1.2改名为j2sdk,将java改名为java 2。在99年sun公司还将java2平台分为三大块:j2se,j2ee,j2me。这次市场推广革命顺应了网络急速发展的潮流,对java2平台的发展起到了很好的催化剂的作用。
  
  * api供应标准革命
  
  而随着供应商的不同,java的api分为三大类:
  
  java core api:由sun公司制定的基本的api,所有的java平台都应该提供。这就是我们平常所说的java核心类库。
  
  java optional api:由sun公司制定的扩充api,java平台可以有选择地提供。比如, jfc以前是sun对jdk的功能扩展,不是java的公共规范。java2平台则包含了jfc技术,不需要再扩展了。
  
  特殊api:由特殊厂商或者组织提供的api。比如,美国法律对出口中国的加解密算法的安全强度有一定的限制,java平台中不能包括一些安全强度较高的加密解密算法,所以部分其它国家的公司,如加拿大的bouncycastle公司等,可以提供一些自己的安全api。
  
  * api制定过程的革命
  
  如果你有需求不能通过遵循标准的api来实现,可以向 www.jcp.org 提出制定新的api的请求,经过审核,你的请求可能被通过或者驳回;如果是被通过,则开始进入制定该api的程序。
  
  j2se1.2时代进行的这些革命形成的制度一直沿用到现在,对java技术的发展形成了深远的影响。
  
  除了上述的三大革命,java2 还支持并新增了许多新特性,最受追捧的当属swing库。swing 是轻量级 的 api,它不但有各式各样先进的组件,而且连组件风格都可抽换。swing 出现之后,大家很快地就不太使用 awt 了。但请不要以为 swing 是用来取代 awt 的,其实 swing 是架构在 awt 之上的, swing 的出现只是减少程序员直接使用 awt 的机会,而不会让 awt 消失。java2 还废弃了一些api,最重要的莫过于thread类中对suspend(),resume()和stop()等方法的废弃。由于jdk1.1的集合类库中的vector类和hashtable类都考虑了同步,在平常的使用中影响效率,所以java2专门添加了对应的非同步类,并完善了集合类库。
  
  java2平台能够得到广泛的应用,还应归功于这个时期的一些优秀书籍,比如著名的<>(卷一和卷二),该书随着jdk版本的变化已经出到第六版。
  
  3. j2se1.3:拓广
  
  java2平台推出后,得到了市场的强烈反响,所以,在2000年5月8日推出的j2se1.3对j2se1.2的改进,主要是对各种已有api的加强和对新api的拓展。
  
  数字运算: 加入了java.lang.strictmath,方便我们的一般的数字运算。
  
  新的timer api:相信大家对其中的java.util.timer和java.util.timertask一定不陌生。
  
  collections包:??加入了一些新的api,方便我们的使用。
  
  虚拟机停止钩子:j2se1.3还加入了一个强大的功能,那就是虚拟机停止钩子(virtual machine shutdown hooks),这个功能使得我们能够在虚拟机停止时完成我们自己的操作,比如关闭网络连接或者保存会话状态或者清除临时文件等等。
  
  dns服务:在jndi接口方面,加入了一个dns服务的实现。
  
  jini实现:j2se1.3包含了一个jini实现,这使得我们可以方便地把诸如打印机、摄像机和磁盘驱动设备插入现有网络中,并且能自动搜索已在网上的设备可以提供的服务并享用这些服务。
  
  xml支持:由于计算机网络和xml技术的快速发展, j2se1.3在optional api中引入了java api for xml包。
  
  hotspot虚拟机:j2se1.3引入了hotspot虚拟机。在solaris版的jdk1.3中,已经不支持传统的虚拟机,而windows版的jdk1.3同时支持传统虚拟机和hotspot虚拟机。
  
  从上面的分析可以看出,j2se1.3主要是对j2se1.2查漏补缺和拓展新的api。从应用领域方面考虑,j2se1.3已经涵盖了数据库、web、多媒体、网络、电话、影像、加解密、图形等等大部分的信息技术领域。
  
  在这个时期java2还有一个重要活动就是推出scsl(sun社区源代码许可)许可协议。sun公司开放源代码项目的“女1号”danese cooper在1999年加入公司,负责sun(包括java)和开放源代码社区之间的协调工作。sun一直尽可能在赢利和开放源代码之间寻求更好的平衡。
  
  在j2se1.3时代,java2平台得到了充分的发展,各大应用服务器在这个时代渐渐成熟并被广泛采纳,而java2相关的培训和书籍更是如火如荼,《thinking in java》当属不得不推荐的一本。
  
  4. j2se1.4:快速
  
  j2se1.4平台的推出发生在2002年2月13日,由于此前在java平台和.net平台间发生了规模浩大的孰优孰劣的论战,而论战中,java平台最大的缺点就是性能问题,所以j2se1.4平台把性能的改善放在了最重要的位置。
  
  hotspot虚拟机: hotspot虚拟机能够很大程度上提高性能,所以j2se1.4已经不支持传统的虚拟机。现在,启动应用程序应该通过-client或者-server选项来启动,如果你还是通过-classic选项来启动,会收到这样的错误提示:”error: classic vm no longer supported。”
  
  锁机制: 由于旧版的hotspot虚拟机的锁机制会导制严重的性能和功能问题,j2se1.4已经改写了该锁机制。
  
  安全api: java cryptography extension(jce),java secure socket extension(jsse)和java authentication and authorization(jaas)这三大安全api从optional api移到了core api中。这样,j2se1.4的安全域(securerandom)实现可以利用操作系统提供的安全机制,以便缩短应用程序的启动时间。同时从optional api移到core api的功能还有xml处理api和jdbc2.0 api。
  
  randomaccess标记接口: 加入了randomaccess标记接口,如果一个list实现了该接口,则表示它支持快速的随机访问,这样可以提高list访问的速度。
  
  linkedhashmap: 加入了linkedhashmap,这是一个插入排序的map实现,但它的运行速度和hashmap一样快。
  
  反射: 很多产品中都要使用反射(reflection)机制,但大家知道,反射是相当耗时的,所以,j2se1.4中重写了java.lang.reflect.field、java.lang.reflect.method.invoke()、java.lang.reflect.constructor.newinstance()和class.newinstance()等方法,使得我们利用反射也能写出高性能的应用程序。
  
  64位计算: j2se1.4支持64位计算。64位支持使j2se1.4可以使用超过几百gb的内存,而以前的版本仅可以使用4g以内的内存。内存使用的扩大可以提高程序的运行效率。
  
  新的i/o api: j2se1.4在api层面最大的变动,就是它更新了原有的java.io包,以及加入了一组更有效率更多功能的新的i/o api。旧的i/o处理是以串流(stream)的方式来存取的,

扫描关注微信公众号