关于jvm:JVM中8种垃圾收集器小结

39次阅读

共计 3762 个字符,预计需要花费 10 分钟才能阅读完成。

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,基于工夫定义的公布版本,即上述提到的公布周期。版本号为 &dollar;FEATURE.&dollar;INTERIM.&dollar;UPDATE.&dollar;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

正文完
 0