JDK 发展历史

JAVA 1.0,代号Oak橡树)

于 1996-01-23 发行

JAVA 1.1

1997-02-19 发行, 主要更新内容:

  1. 引入 JDBC
  2. 添加内部类支持
  3. 引入 JAVA BEAN
  4. 引入 RMI
  5. 引入反射

JAVA 1.2, 代号 Playground(操场)

1998-12-8 发行,主要更新内容:

  1. 引入集合框架
  2. 对字符串常量做内存映射
  3. 引入 JIT(Just In Time)编译器
  4. 引入打包文件数字签名
  5. 引入控制授权访问系统资源策略工具
  6. 引入 JFC(Java Foundation Classes),包括 Swing1.0,拖放和 Java2D 类库
  7. 引入 Java 插件
  8. JDBC 中引入可滚动结果集,BLOB,CLOB, 批量更新和用户自定义类型
  9. Applet 中添加声音支持

JAVA1.3,代号 Kestrel(红隼)

2000-5-8 发布,主要更新内容:

  1. 引入 Java Sound API
  2. 引入 jar 文件索引
  3. 对 Java 各方面多了大量优化和增强
  4. Java Platform Debugger Architecture 用于 Java 调式的平台。

JAVA 1.4,代号 Merlin(隼)

2004-2-6 发布(首次在 JCP 下发行),主要更新内容:

  1. 添加 XML 处理
  2. 添加 Java 打印服务(Java Print Service API)
  3. 引入 Logging API
  4. 引入 Java Web Start
  5. 引入 JDBC 3.0 API
  6. 引入断言
  7. 引入 Preferences API
  8. 引入链式异常处理
  9. 支持 IPV6
  10. 支持正则表达式
  11. 引入 Image I/O API
  12. NIO,非阻塞的 IO,优化 Java 的 IO 读取。

JAVA 5.0,代号 Tiger(老虎),有重大改动

2004-9-30 发布,主要更新内容:

  1. 引入泛型
  2. For-Each 循环 增强循环,可使用迭代方式
  3. 自动装箱与自动拆箱
  4. 引入类型安全的枚举
  5. 引入可变参数
  6. 添加静态引入
  7. 引入注解
  8. 引入 Instrumentation
  9. 提供了 java.util.concurrent 并发包。

JAVA6,代号 Mustang(野马)

2006-12-11 发布,主要更新内容:

  1. 引入了一个支持脚本引擎的新框架(基于 Mozilla Rhino 的 JavaScript 脚本引擎)
  2. UI 的增强
  3. 对 WebService 支持的增强(JAX-WS2.0 和 JAXB2.0)
  4. 引入 JDBC4.0API
  5. 引入 Java Compiler API
  6. 通用的 Annotations 支持

JAVA7,代号 Dolphin(海豚)

2011-07-28 发布,这是 sun 被 oracle 收购(2009 年 4 月)后的第一个版本,主要更新内容:

  1. switch 语句块中允许以字符串作为分支条件
  2. 在创建泛型对象时应用类型推断, 比如你之前版本使用泛型类型时这样写 ArrayList<User> userList= new ArrayList<User>();,这个版本只需要这样写 ArrayList<User> userList= new ArrayList<>();,也即是后面一个尖括号内的类型,JVM 帮我们自动类型判断补全了。
  3. 在一个语句块中捕获多种异常
  4. 添加 try-with-resources 语法支持,使用文件操作后不用再显示执行 close 了。
  5. 支持动态语言
  6. JSR203, NIO.2,AIO, 新 I/O 文件系统,增加多重文件的支持、文件原始数据和符号链接, 支持 ZIP 文件操作
  7. JDBC 规范版本升级为 JDBC4.1
  8. 引入 Fork/Join 框架,用于并行执行任务
  9. 支持带下划线的数值,如 int a = 100000000;,0 太多不便于人阅读,这个版本支持这样写 int a = 100_000_000,这样就对数值一目了然了。
  10. Swing 组件增强(JLayer,Nimbus Look Feel…)参考

JAVA8

2014-3-19 发布,oracle 原计划 2013 年发布,由于安全性问题两次跳票,是自 JAVA5 以来最具革命性的版本,主要更新内容:

  1. 接口改进,接口居然可以定义默认方法实现和静态方法了。
  2. 引入函数式接口
  3. 引入 Lambda 表达式
  4. 引入全新的 Stream API,提供了对值流进行函数式操作。
  5. 引入新的 Date-Time API
  6. 引入新的 JavaScrpit 引擎 Nashorn
  7. 引入 Base64 类库
  8. 引入并发数组(parallel)
  9. 添加新的 Java 工具:jjs、jdeps
  10. JavaFX,一种用在桌面开发领域的技术
  11. 静态链接 JNI 程序库

JAVA9

2017-9-21 发布

  1. 模块化(jiqsaw)
  2. 交互式命令行(JShell)
  3. 默认垃圾回收期切换为 G1
  4. 进程操作改进
  5. 竞争锁性能优化
  6. 分段代码缓存
  7. 优化字符串占用空间

JAVA10

2018-3-21 发布
1.JEP286,var 局部变量类型推断。
2.JEP296,将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程。
3.JEP304,统一的垃圾回收接口。
4.JEP307,G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟。
5.JEP310,应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。
6.JEP312,ThreadLocal 握手交互。在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。
7.JEP313,移除 JDK 中附带的 javah 工具。可以使用 javac -h 代替。
8.JEP314,使用附加的 Unicode 语言标记扩展。
9.JEP317,能将堆内存占用分配给用户指定的备用内存设备。
10.JEP317,使用 Graal 基于 Java 的编译器,可以预先把 Java 代码编译成本地代码来提升效能。
11.JEP318,在 OpenJDK 中提供一组默认的根证书颁发机构证书。开源目前 Oracle 提供的的 Java SE 的根证书,这样 OpenJDK 对开发人员使用起来更方便。
12.JEP322,基于时间定义的发布版本,即上述提到的发布周期。版本号为 $FEATURE.$INTERIM.$UPDATE.$PATCH,分别是大版本,中间版本,升级包和补丁版本。

Java 11

2018-9-25 发布
官网公开的 17 个 JEP(JDK Enhancement Proposal 特性增强提议):

  1. JEP181: Nest-Based Access Control(基于嵌套的访问控制)
  2. JEP309: Dynamic Class-File Constants(动态的类文件常量)
  3. JEP315: Improve Aarch64 Intrinsics(改进 Aarch64 Intrinsics)
  4. JEP318: Epsilon: A No-Op Garbage Collector(Epsilon 垃圾回收器,又被称为”No-Op(无操作)” 回收器)
  5. JEP320: Remove the Java EE and CORBA Modules(移除 Java EE 和 CORBA 模块,JavaFX 也已被移除)
  6. JEP321: HTTP Client (Standard)
    7.JEP323: Local-Variable Syntax for Lambda Parameters(用于 Lambda 参数的局部变量语法)
  7. JEP324: Key Agreement with Curve25519 and Curve448(采用 Curve25519 和 Curve448 算法实现的密钥协议)
  8. JEP327: Unicode 10
  9. JEP328: Flight Recorder(飞行记录仪)
  10. JEP329: ChaCha20 and Poly1305 Cryptographic Algorithms(实现 ChaCha20 和 Poly1305 加密算法)
  11. JEP330: Launch Single-File Source-Code Programs(启动单个 Java 源代码文件的程序)
  12. JEP331: Low-Overhead Heap Profiling(低开销的堆分配采样方法)
  13. JEP332: Transport Layer Security (TLS) 1.3(对 TLS 1.3 的支持)
  14. JEP333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)(ZGC:可伸缩的低延迟垃圾回收器,处于实验性阶段)
  15. JEP335: Deprecate the Nashorn JavaScript Engine(弃用 Nashorn JavaScript 引擎)
  16. JEP336: Deprecate the Pack200 Tools and API(弃用 Pack200 工具及其 API)

垃圾器收集器总结

Serial

  • 串行
  • 新生代
  • 复制算法
  • 响应速度优先
  • 单CPU环境下的Client模式

Serial Old

  • 串行
  • 老年代
  • 标记-整理
  • 响应速度优先
  • 单CPU环境下的Client模式、CMS的后备预案

ParNew

  • 并行
  • 新生代
  • 复制算法
  • 响应速度优先
  • 多CPU环境时在Server模式下与CMS配合

Parallel Scavenge

  • 并行
  • 新生代
  • 复制算法
  • 吞吐量优先
  • 在后台运算而不需要太多交互的任务

Parallel Old

  • 并行
  • 老年代
  • 标记-整理
  • 吞吐量优先
  • 在后台运算而不需要太多交互的任务

CMS

  • 并发
  • 老年代
  • 标记-清除
  • 响应速度优先
  • 集中在互联网站或B/S系统服务端上的Java应用

G1

  • 并发
  • both
  • 标记-整理+复制算法
  • 响应速度优先
  • 面向服务端应用,将来替换CMS

JVM中8种垃圾收集器小结相关推荐

  1. JVM学习----七种垃圾收集器(GC)

    文章目录 GC垃圾收集器 七种经典的垃圾回收器 查看默认垃圾收集器 新生代 Serial垃圾收集器(单线程. 复制算法) ParNew 垃圾收集器 (Serial的多线程版本. 复制算法) Paral ...

  2. JVM的7种垃圾收集器

    原文地址:Java虚拟机垃圾回收(三) 7种垃圾收集器 Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在<Java虚拟机垃圾回收(一) 基础>中 ...

  3. 深入理解JVM(3)——7种垃圾收集器

    如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商.版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并 ...

  4. JVM:7种垃圾收集器

    一.Serial收集器(单线程收集器) 这个收集器是一个单线程的收集器,但它的"单线程"的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃 ...

  5. Java 的七种垃圾收集器

    了解 Java 中的内存管理. 用 C 或 C++ 这样的编程语言写一个应用时,需要编写代码来销毁内存中不再需要的对象.当应用程序扩展得越来越复杂时,未使用对象被忽略释放的可能性就越大.这会导致内存泄 ...

  6. JVM的内存结构,Eden和Survivor比例;JVM中一次完整的GC流程,对象如何晋升到老年代,说说你知道的几种主要的JVM参数;CMS 常见参数解析;.你知道哪几种垃圾收集器,各自的优缺点

    47.JVM的内存结构,Eden和Survivor比例 49.JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数 50.-XX:+CMSScavengeBefo ...

  7. jvm七种垃圾收集器

    JVM_七种垃圾收集器介绍 本文中的垃圾收集器研究背景为:HotSpot+JDK7 一.垃圾收集器概述 如上图所示,垃圾回收算法一共有7个,3个属于年轻代.三个属于年老代,G1属于横跨年轻代和年老代的 ...

  8. 垃圾收集器回收种类 以及七种垃圾收集器

    垃圾收集器回收种类 垃圾收集器是垃圾回收算法的具体实现 串行垃圾回收器(Serial) 它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停用户线程 (并行垃圾回收器)Parallel 多个垃圾收集 ...

  9. 【深入理解JVM】:HotSpot垃圾收集器

    相关概念 并发和并行 这两个名词都是并发编程中的概念,在谈论垃圾收集器的上下文语境中,它们可以解释如下. 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态. 并发( ...

最新文章

  1. 大数据产品不仅仅是IT工具
  2. Python2 编码问题分析
  3. chrome浏览器上传文件延迟_扫描识别工具Dynamic Web TWAIN使用教程:移动浏览器捕获(下)...
  4. CRM问题:导入、导出实体错误
  5. Python基础教程:默认参数和可变参数
  6. SpringBoot-@Configuration
  7. latex 新定义环境 引用_炉石传说:完全虐杀式上分!新版本第二天动物园迅速定义环境!...
  8. 最优化课堂笔记01: 第一章 最优化的基本概念
  9. quartus状态机生成_生成器作为(快速失败)状态机
  10. (转载)【TP5.0】设置session有效时长+修改默认存储路径
  11. 解决php上传文件过程中Warning move_uploaded_file, failed to open stream的解决方案
  12. java 高级工程师面试
  13. 使用Webpack的代码分离实现Vue懒加载(译文)
  14. 如何在基于Aspect的情感分析中结合BERT和语法信息
  15. windows2003安装网络打印机的问题(原创,转载请注明)
  16. 让计算机工作起来教学反思,计算机教学反思
  17. Mysql 设置问题,当使用一些开源的软件动态安装MYSQL数据库后,发现里面的中文全是乱码。...
  18. Lucene的几种分词系统
  19. 四级网络工程师试题一
  20. uni-app 启动页控制

热门文章

  1. [Java] 蓝桥杯BASIC-23 基础练习 芯片测试
  2. [JZOJ5553][20190625]谜
  3. Jarvis Oj Pwn 学习笔记-level4
  4. 多线程-AbstractQueuedSynchronizer(AQS)
  5. lduan SCVMM 2012 库服务器(五)
  6. eclipse中提示“java application configureation name i”
  7. CEF使用的几个注意点
  8. jquery插件开发方法
  9. Golang sync.WaitGroup 简介与用法
  10. 经典算法——合并两个有序单向链表