(一)Java的发展简史和技术体系

世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。

一、概述

Java目前广泛应用于嵌入式系统、移动终端、企业服务器和大型机等各种场合。
Java目前具有600多万软件开发者,当然这是在几年前统计的,java能获得如此广泛的认可,除了因为他拥有一门结构严谨、面向对象的编程语言之外,还有许多不可忽视的优点:

  1. 他摆脱了硬件平台的的束缚,实现了“一次编写,到处运行”的理想;
  2. 它提供了一种相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题;
  3. 他实现了热点代码检测和运行时编译及优化(垃圾回收机制),使得java应用能随着运行时间的增加而获得更高的性能;
  4. 它有一套完善的应用程序接口,还有无数的开源社区的第三方类库来帮助实现各种各样的功能;

作为Java程序员,在编写程序除了尽情发挥Java各种优势外,还应该了解和思考一下Java技术体系中这些技术是如何实现的。认清这些技术运作本质是自己思考“程序这样写好不好”的基础和前提

二、Java技术体系

Sun官方所定义的Java技术体系包括了以下几个组成部分:

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

我们可以把Java程序设计语言、Java虚拟机、JavaAPI 类库这三部分统称为JDK(Java Development Kit 中文名称:Java生长工具)。

Java API类库中的Java SE API子集和Java虚拟机这两部分统称为JRE(Java Runtime Environment 中文名称:Java运行环境)。
在这里插入图片描述

以上是根据各个组成部分的功能来进行划分,按照技术所服务的领域来划分可以分为四个平台,分别为:

  1. Java Card:支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。
  2. Java ME(Micro Edition):支持Java程序运行在移动终端上的平台,这个版本以前称为J2ME。
  3. Java SE(Standard Edition):支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,这个版本以前叫J2SE。
  4. Java EE(Enterprise Edition):支持使用多层架构的企业应用(如ERP、CRM应用)的Java平台,这个版本以前称为J2EE。

三、Java发展史

在这里插入图片描述

  1. 1991年4月,有James Gosling博士领导的绿色计划开始启动,计划目的是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个计划的产品就是Java前身:Oak(橡树)。但是当时在市场上上并不成功,随着1995互联网兴起,Oak找到了适合自己发展的市场定位并蜕变称为了Java语言。
  2. 1995年5月,OAK改为了Java,Java1.0版本诞生。当时的口号就是“Write Once,Run Anywhere”的口号。
  3. 1996年1月,JDK1.0发布,JDK1.0版本的代表技术包括:Java虚拟机、Applet和AWT等。
  4. 1997年2月,JDK1.1发布,JDK1.1技术代表有:JAR文件格式、JDBC、JavaBeans、RMI。语法也有了一定的发展,如内部类、反射
  5. 1998年12月,JDK1.2发布,把Java技术体系拆分为了3个方向,分别是桌面应用开发J2SE、面向企业级开发J2ME、面向手机等移动端开发J2ME。这也就是很多人好奇为什么老是听说什么J2EE,原因就是在这,他是在jdk1.2被正式提出来的。
    技术代表有:EJB、Java Plug-in、Java IDL、Swing等。语言上添加了Clollections集合类。并且在这个版本Java虚拟机第一次内置了JIT(Just In Time)编译器。
  6. 2000年5月,JDK1.3发布,提供了数学运算和新的Timer API等。JNDI服务从JDK1.3开始作为一项平台服务提供(以前仅仅是一项扩展)。自JDK1.3开始,Sun维持了一个习惯:大约两年左右发布一个JDK主版本。
  7. 2002年2月,JDK1.4发布,很多著名公司参与甚至实现自己独立的JDK1.4。仍然有很多主流应用(Spring、Hibernate、Struts等)能直接在JDK1.4运行。技术特性:如正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等。这一年微软的.NET Framework发布。
  8. 2004年9月,JDK1.5发布,语法上:自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)。在虚拟机和API层面上,这个版本引进了Java的内存模型(Java Memory Model,JMM)、提供了java.util.concurrent并发包等。
  9. 2006年12月,JDK1.6发布,已提供动态语言支持(通过内置Mozilla JavaScript Rhimo引擎实现)。对Java虚拟机内部做了大量改进,包括锁与同步、垃圾收集、类加载等方面算法都有相当多的改动
  10. 2009年2月,JDK1.7发布,改进包括:提供信的G1收集器、升级类加载架构,等等。2009年4月,Oracle以74亿美元收购Sun公司。
  11. 2011年7月,甲骨文发布java7.0的正式版。
  12. 2014年3月,甲骨文(O)公司发布了Java8正式版,对Lambda表达式的支持,这让Java语言拥有了流畅的函数式表达能力,内置Nashorn JavaScript引擎的支持,提供了新的时间、日期API。彻底移除HotSpot的永久代
  13. 2017年9月,JDK1.9发布,Oracle随即宣布,以后 JDK将会在每年的3月和9月各发布一个大版本,JDK 9带着 Jigsaw最终发布了,除了Jigsaw外,JDK 9还增强了若干工具(JS Shell、JLink、JHSDB等),整顿了 HotSpot各个模块各自为战的日志系统,支持HTTP 2客户单API等91个JEP。
  14. 2018年3月,JDK10发布,这版本的主要研发目标是内部重构,诸如统一源仓库、统一 垃圾收集器接口等等。
  15. 2018年9月,JDK 11发布。
  16. 2019年2月,JDK 12发布。

jdk自出世以来,很多java公司全都停留在了1.8,尽管jdk现在可能都出了jdk18,这是为什么?

很多人都说,因为低版本的功能足够使用了;也有人说低版本的内容少、体积小,运行效率高。在我看来,最关键核心的因素是因为它免费!!!

那么有人要问啦,java本来不就是开源、免费的么?是的,它是免费的,但只是免费用于个人,用于研究、非生产环境。如果你把新版jdk用来放在生产环境,用于商业应用了,那么oracle随时可以向你收费。

所以,如果你的应用打算用于商业运营,请记住jdk最后一个商业免费版本:jdk-8u202

再者就是轻易升级原有项目的jdk版本会出现各种问题。某支付项目原来是jdk1.8,某天项目经理想尝试下升级到11,注意还仅仅是11,不是18,升级好以后,发现老代码报如下的最典型的Unsupported major.minor version 52.0错。不要小看jdk版本,版本之前其实差异是很大的。

四、混合语言

当单一的Java语言已经无法满足当前软件的复杂需求时,越来越多基于Java虚拟机的语言被应用到软件项目中。每种语言都可以针对自己擅长的方面更好地解决问题。接口对每一层的开发者都是透明的,各种语言之间的交互不存在任何困难。因为他们最终都运行在一个虚拟机之上。

许多已经有很长历史的程序语言也出现了基于Java虚拟机实现的版本。
在这里插入图片描述

例如:jython是使用java实现的python,语法基本等同于python;

五、64位虚拟机

几年之前,主流的CPU就开始支持64位架构。Java虚拟机也在很早之前推出了支持64位系统的版本。但是发现了很多问题,首先是内存问题,由于指针膨胀和各种数据类型对齐补白的原因,运行于64位的Java应用相比32位,需要消耗更多的内存。其次是运行速度,64位虚拟机的运行速度在各个测试项上和32位相差15%左右的性能差距

Sun注意到了这些问题,在JDK1.6之后,提供了普通对象指针压缩功能(-XX:+UseCompressedOops)。在解释器解释字节码时,植入压缩指令以节省内存消耗

文章来源于 深入理解Java虚拟机 一书当中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值