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
Java各版本新特性总结的更多相关文章
- 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 ...
- java 各版本新特性
Java 5,6,7,8,9,10,11新特性吐血总结 lkd_whh关注赞赏支持 12018.04.01 14:09:15字数 1,948阅读 10,615 作者:拔剑少年 简书地址:https:/ ...
- Java最近版本新特性使用介绍
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在阅读<Thinking in Java>的过程中,并发这一章出现不少新特性,工作中也有 ...
- 记 Java 各版本新特性
Java 8: Lambda 表达式: (paramList) -> expression; 或者 (paramList) -> {statments;} 演示用例: public int ...
- Atitit opencv版本新特性attilax总结
Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...
- Atitit 发帖机系列(8) 词法分析器v5 版本新特性说明)
Atitit 发帖机系列(8) 词法分析器v5 版本新特性说明) v5 增加对sql单引号的内部支持.可以作为string 结构调整,使用递归法重构循环发..放弃循环发. V4 java dsl词 ...
- JDK各版本新特性!
1.JDK1.5 新特性 1.自动装箱与拆箱:自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中.自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取 ...
- [转] Java 8的新特性
简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...
- Java 8的新特性—终极版
作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...
随机推荐
- 【线性代数】5-2:置换和余因子(Permutations and Cofactors)
title: [线性代数]5-2:置换和余因子(Permutations and Cofactors) categories: Mathematic Linear Algebra keywords: ...
- JavaWeb_(Spring框架)用户登陆Spring整合到Servlet中
一.使用servlet技术开发用户登陆功能 在MySQL中准备一个user表,表中增加一条假数据 使用Servlet实现用户登陆的功能 用户登陆的<from>表单 <form id= ...
- 解析配置文件 redis.conf
1.units单位 2.INCLUDES包含 3.GENERAL通用 1).daemonize daemonize yes 启用后台守护进程运行模式 2).pidfile pidfile /var/r ...
- Apache Flink - 命令
$flink命令位置 命令 选项 jar包位置 \ --input 输入文件位置 --out 输出文件位置 ./bin/flink run ./examples/batch/WordCount.jar ...
- 解决JAVA单步调试键盘输入被JDB占用的问题
解决JAVA单步调试键盘输入被JDB占用的问题 问题来源: 在完成本周任务时,编写的代码中含有Scanner类,编译及运行过程均正确,但使用JDB单步调试时,运行到输入行无法在JDB内部输入变量值. ...
- xpath 轴定位表达方式
xpath的使用基本语法: 1.// 从根节点开始,查找对象是全文. 2./ 从当前标签的路径开始查找 3.text()获取当前路径下的文本 4.@+类名或者id名 查找类名或者id的名字 5. .一 ...
- Vue tree自定义事件注意点
<template> <div id="Tree_ElementTree" style="height: 100%;"> <el- ...
- Sql题目精选练习
1.每日经典sql 1.1.1 根据三张关系表查询雇员中工资最高的雇员的员工姓名.工资和部门号. salary(工资表) employee(员工表) department(部门表) Sql语句: SE ...
- linux服务端导入oracle数据库.sql脚本
一般情况下,后缀名为.sql或者为记事本类型的文本脚本可以通过打开后复制或者直接在客户端打开执行,但如果脚本比较大时(比如文件达到几百M以上), 普通文本工具和数据库客户端都无法打开,哪怕可以打开,也 ...
- [maven][转]pom配置之:snapshot快照库和release发布库
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...