• Java各版本新特性总结


       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

  • 相关阅读:
    如何解决WEB应用中文乱码问题
    js获取指定格式的时间字符串
    js 实现 Base64 编码的相互转换
    Sql Server 与 MySql 在使用 update inner join 时的区别
    VMware12创建新的虚拟机及设置硬件环境
    Sql Server 中使用日期遍历
    Linux 添加定时任务,crontab -e 命令与直接编辑 /etc/crontab 文件
    mysql 中 max_allowed_packet 查询和修改
    eclipse编译项目:Java @Override 注解报错的解决方法
    eclipse启动项目报错:java.lang.ClassNotFoundException: ContextLoaderListener
  • 原文地址:https://www.cnblogs.com/ocean234/p/11176459.html
Copyright © 2020-2023  润新知