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. vue中.sync修饰符,实现子组件实时更新父组件的值

    vue 修饰符sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定. 不过它有一个前身,先来看看.sync出现之前是如何实现的 父组件中(传递给子组件一个值:p ...

  2. c++ 判断是元音还是辅音

    #include <iostream> using namespace std; int main() { char c; int isLowercaseVowel, isUppercas ...

  3. js 移除数组中的内容

    使用方法:arr.splice(arr.indexOf(ele),length):表示先获取这个数组中这个元素的下标,然后从这个下标开始计算,删除长度为length的元素 这种删除方式适用于任何js数 ...

  4. iTerm2 + oh my zsh +agnoster

    安装iTerm2 iTerm2官方下载地址 http://www.iterm2.com/downloads.html 安装Oh My Bash 1.通过cat /etc/shells命令可以查看当前系 ...

  5. 一篇文章搞懂Python装饰器所有用法

    01. 装饰器语法糖 如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 它放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上 ...

  6. c# 线程异步处理

    public class AsyncHelper { private static readonly TaskFactory _myTaskFactory = new TaskFactory(Canc ...

  7. linux简单命令3---帮助命令

    1:帮助命令:man 命令: 2:这个帮助用的比较多(还是中文):命令  --help 3:shell帮助 4:详细命令(比man更详细)帮助,用的少,比较麻烦:info

  8. 阿里云轻量应用服务器 配置mysql详解(转载)

    1.服务器规格 1.地域选择 考虑个人地址因素因此选择了华南. 2.选择应用镜像/系统镜像 这个应该看个人需求,因为我只是想用来放数据库的,所以就随便选了个WordPress. 选好之后购买就完事了, ...

  9. expect实现免交互

    如果想写一个能够自动处理输入输出的脚本又不想面对C或Perl,那么expect是最好的选择.它可以用来做一些Linux下无法做到交互的一些命令操作. (1).安装和使用expect expect是不会 ...

  10. 使用Android Studio时你应该知道的一切配置和使用Genymotion模拟器运行程序

    参考博客: 配置Android Studio: http://www.cnblogs.com/wi100sh/p/5653427.html Android Studio打包APK: http://bl ...