>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23495 个阅读者 刷新本主题
 * 贴子主题:  Java各版本新特性总结 回复文章 点赞(0)  收藏  
作者:日月光华    发表时间:2019-11-04 19:51:46     消息  查看  搜索  好友  邮件  复制  引用

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


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->图形用户界面(上)
  JavaWeb开发-->在Web应用中访问Web服务
  JSP与Hibernate开发-->数据库事务的并发问题的解决方案
  Java网络编程-->安全网络通信
  精通Spring-->通过Axios访问服务器
  Vue3开发-->绑定表单
  TCP、UDP及Socket代码示例
  ThreadLocal的内存泄露的原因分析以及如何避免
  Java关键字final、static使用总结
  NoClassDefFoundError和ClassNotFoundException的区别
  Synchronized与ReentrantLock区别总结
  volatile 与 synchronized 详解
  Java设计模式:迭代器模式
  Socket服务器的整体架构
  redis持久化问题处理
  Java 入门实用代码:从 List列表中 截取子列表
  Java入门实用代码:集合转数组
  Java入门实用代码:字符串替换
  判断一个字符是否是汉字
  Java判断一个字符是否为中文字符
  关于Java中try finally return语句的执行顺序浅析
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。