深入理解JVM第三版笔记(1)-走近Java
走近Java
Java技术体系性提供了完整用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统,移动终端,企业服务器,大型机等多种场合.
Java体系吸引了全球600多万的开发者,是全球最大的软件开发团队,部署超过45亿台设备,8亿多PC,21亿部移动电话和其他手持设备,35亿个智能卡,大量机顶盒,导航系统和其他设备.
Java的特性
-
摆脱了硬件平台的束缚,实现了一次编写,到处运行的理想
-
提供了一种相对安全的内存管理和访问机制,避免了大部分内存泄漏和指针越界的问题
-
实现了热点代码检测和运行时编译及优化,使得Java应用随着运行时间的增长和获得更高的性能
-
有一套完整的API,还有无数商业结构和开源社区的第三方类库来帮助用户实现各种各样的功能
Java技术体系
广义上Kotlin,Clojure,JRuby,Groovy等运行在JVM上的编程语言及程序都属于Java技术体系中的一员
JCP(Java Community Process)定义的包括:
- Java程序设计语言
- 各种硬件平台上的Java虚拟机实现
- Class文件格式
- Java类库API
- 商业机构和开源社区的第三方类库
Java发展史
1991年4月 James Gosling博士Green Project项目启动,它最初的目标是开发一种能够在消费性电子产品(机顶盒,冰箱,收音机)等上运行的程序架构,这个计划的产品就是Java语言的前身:Oak(橡树),Oak当时并未取得成功,但随着1995年互联网潮流的兴起,Oak迅速找到了最适合自己发展的市场定位并演化为Java语言.
1995年5月23日,Oak语言改名为Java,并在SunWorld大会上正式发布Java1.0版本,第一次提出"Write Once,Run Anywhere"的口号.
1996年1月23日,JDK1.0发布,Java语言用了第一个正式版本.包含纯解释执行的JVM Sun Classic VM,Java1.0 的代表技术有JVM,Applet,AWT等
1997年2月19日Sun公司发布了JDK1.1,许多Java里最基础的技术都是在此版本中提出,如JDBC,JAR文件格式,JavaBeans,RMI等,Java语法也得到了一定的增强,如内部类和反射都在此版本出现.
1998年12月4日,JDK1.2发布,Java体系被拆分为三个方向,面向桌面应用的J2SE,面向企业级开发的J2EE,和面向手机等移动终端开发的J2ME,出现了EJB,Java Plug-in ,Java IDL,Swing等技术,并且Java虚拟机中首次内置了JIT技术,另外此版本同时存在三种JVM,Classic VM,HotSpot VM 和Exact VM.
1999年4月27日,HotSpot虚拟机诞生,它表现优异由小公司开发,于1997年被Sun公司收购,它在Java1.2中以附加程序出现,在Java1.3之后所有JDK版本作为默认虚拟机.
2000年5月8日,JDK1.3发布,主要改进体现在类库上,如数学运算和新的Timer API等,JNDI服务从此开始作为平台级服务.此后大约每两年发布一个JDK.
2002年2月13日,JDK1.4发布,标志着Java真正走向成熟,带来了许多新特性,如正则表达式,异常链,NIO,日志类,XML解析器和XSLT转换器等.同时微软的.NET技术发布.
2004年9月30日,JDK5发布,摒弃了以往谦逊的命名方式,JDK5在语法易用性上做了很大的改进,如自动装箱,泛型,动态注解,枚举,可变长参数,foreach循环等,并该井了JMM(Java Memory Model),提供了Java.util.concurrent并发包.
2006年12月11日,JDK6发布,终结了J2ME,J2SE,J2EE的产品线命名方式,启动了Java EE6,Java SE6, JavaME6的命名方式,改进包裹提供初步的动态语言支持,提供编译器注解处理器,和微型HTTP服务器API等等,同时对JVM内部做了大量改进,包括锁与同步,垃圾收集,类加载等.
2006年11月13日,Sun公司计划把Java开源,遵循GPL V2的OpenJDK问世,除了极少量产权代码,OpenJDK几乎拥有了当时SunJDK7的全部代码(OpenJDK的质量主管称,除了开头的版权注释外,代码几乎是完全一样的).它计划实现:Lambda项目,Jigsaw项目,动态语言支持,Garbage-First收集器,Coin项目(Java语法细节进化)
2009年2月19日,JDK7完成了第一个里程碑,共10个里程碑,2010年9月9日结束.2009年4月20日,Oracle收购Sun公司.
2014年3月18日,JDK8发布,Oracle启用JEP(JDK Enhancement Proposals)来定义和管理纳入新版本JDK发布范围的功能特性.完成了JDK7计划中没完成的项目,包括对Lambda的支持,新的时间,日期API,彻底移除HotSpot的永久代.
2017年9月21日JDK9发布,Jigsaw,增强了JS Shell,JLink,JHSDB等,JDK9后,Java以持续交付和更加敏捷的研发节奏向前推进.每6个大版本才会推出一个LTS版本,JDK8和JDK11是LTS版本.
2018年3月30日,JDK10发布,此版本的主要研发目标是内部重构,诸如统一源仓库,统一垃圾收集接口,统一即时编译接口,这些对普通用户来说显得乏善可陈,但对Java未来的发展来说大有裨益.
2018年9月25日,JDK11发布,调整了商业许可,以后会同时发行两个JDK,一个是GPLV2+CE协议下的OpenJDK,另个一是在新OTN协议下的传统OracleJDK,它们共享大部分源码,在功能上几乎是一模一样的,核心差异是前者可以免费在开发,测试,或者生产环境中使用,但是只提供半年时间的支持,后者个人依然可以免费使用,但是在生产环境中商用就必须付费,可以有三年的更新支持.也就是说Oracle迫使商业用户要么不断升级JDK的版本,要么就要购买商业支持,
2019年2月,JDK12发布前夕,Oracle宣布放弃对上一个OpenJDK的维护,RedHat同时从Oracle手上接过OpenJDK8和OpenJDK11的管理权力和维护职责.Oracle不愿意在旧版本上继续消耗资源,而RedHat或者说它背后的IBM公司又乐意扩大自己在Java社区的影响力,这是一笔双赢的交易.也并不改变Oracle领导Java社区的局面带来根本性的改变.
2019年3月20日,JDK12发布,只包含8个JEP,Switch表达式,Java微测试套件JMH,最引人注目的是加入了RedHat领导开发的Shenandoah垃圾收集器,它是首个非Oracle开发,但目标又与ZGC完全一致的新收集器.Oracle为了保持OracleJDK和OpenJDK的一致,在OracleJDK12中通过条件编译的方式强行剔除掉Shenandoah,使之成为历史上唯一一个进入了OpenJDK发布清单,但在OracleJDK中无法使用的功能.

浙公网安备 33010602011771号