Java或者说JDK的更新一般分为两部分内容:Java语言、JVM(C、C++编写),但通常情况下都不会单独发布,因为新的语言特性需要特定的JVM支持才行。下面我总结了从古至今Java各版本的新特性,一起来见证Java的发展壮大和不断成长吧。

JDK Beta(1995)

1995年发布alpha和beta Java公开版本,据说非常不稳定

JDK1.0(1996)

Sun公司发布Java1.0,发布初期叫Oak,后改名为Java(JDK1.0基本上只支持Java语言基础特性)

JDK1.1(1997)

1.引入内部类
2.引入反射
3.JAR文件格式
4.引入JDBC
5.引入RMI

J2SE 1.2(1998)(里程碑版本)

1.Java技术体系拆分为:J2SE、J2EE、J2ME
2.引入集合框架
3.引入JIT即时编译器
4.引入EJB技术
5.引入Swing

J2SE 1.3(2000)

1.引入Timer API
2.默认虚拟机改为HotSpot VM,之前为Classic VM
3.提升JNDI为平台级服务,之前仅仅是一项扩展

J2SE 1.4(2002)(Java真正走向成熟的版本)

1.引入NIO
2.正则表达式
3.异常链
4.新增java.util.logging日志API

J2SE 5.0(2004)(Java语言重大升级,版本号更名为5.0)

1.泛型
2.枚举
3.注解
4.自动装拆箱
5.静态导入(import static)
6.可变长参数
7.JUC
8.For-Each循环
9.改进了Java内存模型(这点对并发编程非常重要)

Java SE 6(2006)(JVM重大升级)

1.引入垃圾回收器G1
2.优化锁与同步、垃圾收集、类加载等
3.提供动态语言支持

Java SE 7(2011)(SUN被Oracle收购,沉寂5年后由Oracle推出)

1.钻石语法(泛型实例化类型自动推断)
2.try-with-resources语法糖
3.多个catch块用|连接
4.switch中可以使用字符串
5.64位JDK的指针压缩
6.数值可加下划线
7.添加对ARM架构的支持(是不是为Android的出现提供了基础?)
8.JUC中引入fork join编程框架

Java SE 8(2014)(Java语言重大升级,LTS -- 长期支持)

1.Lambuda表达式(闭包,允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理)
2.接口中的默认方法和静态方法
3.方法引用
无参构造器方法引用:类名::new 或者 Class::new
静态方法引用:Class::static_method (接受一个Class类型参数)
类成员方法引用:Class::method (没有参数)
实例成员方法引用:instance::method (接受一个instance对应类型的参数)
4.重复注解(同一个地方可以重复使用多次同一个注解,注解本身需要被@Repeatable修饰)
5.升级工具库实现
HashMap实现修改、ConCurrentHashMap实现修改
新增Stream API(java.util.stream)
新增Optional类以解决空指针问题
6.工具包:类依赖分析工具jdeps
7.JVM方面:使用Metaspace(JEP 122)代替方法区持久代(PermGen space)

Java SE 9(2017)

1.JVM类加载机制跟之前的双亲委派模型有了很大差别,趋向模块化设计,即Jigsaw项目(参考OSGi?)
2.AOT编译,通过Graal VM实现
3.改善锁竞争机制
4.http2.0客户端
5.String类底层不再采用char数组存储
6.默认垃圾回收器改为G1

Java SE 10(2018.3)

1.局部变量类型推断,var关键字

Java SE 11(2018.9)(LTS)

1.动态类文件常量
2.Epsilon无操作垃圾收集器,常用来做测试
3.引入ZGC

Java SE 12(2019.3)

1.实验性的低延迟垃圾收集器:Shenandoah

【参考资料】
1、《深入理解Java虚拟机》
2、维基百科--Java版本历史

历史出现过的虚拟机

Sun Classic VM, Exact VM(准确式内存管理), Sun HotSpot VM, BEA JRockit VM, IBM J9

Azul VM, Zing JVM, Google Android Dalvik VM(寄存器架构而非栈架构)

常用JDK工具

字节码工具:asmtools.jar
查看字节码反汇编:javap -p -v XXX.class

Java各版本新特性总结的更多相关文章

  1. Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结

    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 ...

  2. java 各版本新特性

    Java 5,6,7,8,9,10,11新特性吐血总结 lkd_whh关注赞赏支持 12018.04.01 14:09:15字数 1,948阅读 10,615 作者:拔剑少年 简书地址:https:/ ...

  3. Java最近版本新特性使用介绍

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在阅读<Thinking in Java>的过程中,并发这一章出现不少新特性,工作中也有 ...

  4. 记 Java 各版本新特性

    Java 8: Lambda 表达式: (paramList) -> expression; 或者 (paramList) -> {statments;} 演示用例: public int ...

  5. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

  6. Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明)

    Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明) v5  增加对sql单引号的内部支持.可以作为string 结构调整,使用递归法重构循环发..放弃循环发. V4 java dsl词 ...

  7. JDK各版本新特性!

    1.JDK1.5 新特性 1.自动装箱与拆箱:自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中.自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取 ...

  8. [转] Java 8的新特性

    简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...

  9. Java 8的新特性—终极版

    作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...

随机推荐

  1. luogu2885

    P2885 [USACO07NOV]电话线Telephone Wire 给出若干棵树的高度,你可以进行一种操作:把某棵树增高h,花费为h*h. 操作完成后连线,两棵树间花费为高度差*定值c. 求两种花 ...

  2. MySQL数据分析-(8)SQL基础操作之库操作

    前面我们讲了学习SQL的两个逻辑框架,jacky说了这样一个逻辑:库是为了存储表的,所以一定是先有库才有表:同样的道理,有表才有表中的数据,是吧,肯定是这个逻辑:那么,今天jacky就捋着这个逻辑从库 ...

  3. iOS开发系列--地图与定位总结

    现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的 ...

  4. JAVA基础知识|反射

    一.理解反射 1.1.基础概念 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为ja ...

  5. vue devtools无法使用

    vue devtools无法使用 一.总结 一句话总结: 没显示vue devtools调试工具的原因是用了生产环境的版本或是压缩的vue版本,或是没有勾选:允许访问文件网址 二.vue调试工具Dev ...

  6. android: Android 权限管理小结

    一. 概述 感谢郭神,自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有 ...

  7. 西湖论剑2019部分writeup

    做了一天水了几道题发现自己比较菜,mfc最后也没怼出来,被自己菜哭 easycpp c++的stl算法,先读入一个数组,再产生一个斐波拉契数列数组 main::{lambda(int)#1}::ope ...

  8. Hystrix-基本概念(设计原则和两种隔离技术)

    一.Hystrix是什么在微服务的架构系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务.有的时候某些依赖服务出现故障也是很正常的.Hystrix可以让我们在对服务间的调用进行控制 ...

  9. Vue的基础学习

    一.Vue的计算属性:get和set属性 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  10. MLN 讨论 —— 基础知识

    一. MLN相关知识的介绍 1. First-order logic A first-order logic knowledge base (KB) is a set of formulas in f ...