JVM中8种垃圾收集器小结
JDK 发展历史
JAVA 1.0,代号Oak橡树)
于 1996-01-23 发行
JAVA 1.1
1997-02-19 发行, 主要更新内容:
- 引入 JDBC
- 添加内部类支持
- 引入 JAVA BEAN
- 引入 RMI
- 引入反射
JAVA 1.2, 代号 Playground(操场)
1998-12-8 发行,主要更新内容:
- 引入集合框架
- 对字符串常量做内存映射
- 引入 JIT(Just In Time)编译器
- 引入打包文件数字签名
- 引入控制授权访问系统资源策略工具
- 引入 JFC(Java Foundation Classes),包括 Swing1.0,拖放和 Java2D 类库
- 引入 Java 插件
- JDBC 中引入可滚动结果集,BLOB,CLOB, 批量更新和用户自定义类型
- Applet 中添加声音支持
JAVA1.3,代号 Kestrel(红隼)
2000-5-8 发布,主要更新内容:
- 引入 Java Sound API
- 引入 jar 文件索引
- 对 Java 各方面多了大量优化和增强
- Java Platform Debugger Architecture 用于 Java 调式的平台。
JAVA 1.4,代号 Merlin(隼)
2004-2-6 发布(首次在 JCP 下发行),主要更新内容:
- 添加 XML 处理
- 添加 Java 打印服务(Java Print Service API)
- 引入 Logging API
- 引入 Java Web Start
- 引入 JDBC 3.0 API
- 引入断言
- 引入 Preferences API
- 引入链式异常处理
- 支持 IPV6
- 支持正则表达式
- 引入 Image I/O API
- NIO,非阻塞的 IO,优化 Java 的 IO 读取。
JAVA 5.0,代号 Tiger(老虎),有重大改动
2004-9-30 发布,主要更新内容:
- 引入泛型
- For-Each 循环 增强循环,可使用迭代方式
- 自动装箱与自动拆箱
- 引入类型安全的枚举
- 引入可变参数
- 添加静态引入
- 引入注解
- 引入 Instrumentation
- 提供了 java.util.concurrent 并发包。
JAVA6,代号 Mustang(野马)
2006-12-11 发布,主要更新内容:
- 引入了一个支持脚本引擎的新框架(基于 Mozilla Rhino 的 JavaScript 脚本引擎)
- UI 的增强
- 对 WebService 支持的增强(JAX-WS2.0 和 JAXB2.0)
- 引入 JDBC4.0API
- 引入 Java Compiler API
- 通用的 Annotations 支持
JAVA7,代号 Dolphin(海豚)
2011-07-28 发布,这是 sun 被 oracle 收购(2009 年 4 月)后的第一个版本,主要更新内容:
- switch 语句块中允许以字符串作为分支条件
- 在创建泛型对象时应用类型推断, 比如你之前版本使用泛型类型时这样写
ArrayList<User> userList= new ArrayList<User>();
,这个版本只需要这样写ArrayList<User> userList= new ArrayList<>();
,也即是后面一个尖括号内的类型,JVM 帮我们自动类型判断补全了。 - 在一个语句块中捕获多种异常
- 添加 try-with-resources 语法支持,使用文件操作后不用再显示执行 close 了。
- 支持动态语言
- JSR203, NIO.2,AIO, 新 I/O 文件系统,增加多重文件的支持、文件原始数据和符号链接, 支持 ZIP 文件操作
- JDBC 规范版本升级为 JDBC4.1
- 引入 Fork/Join 框架,用于并行执行任务
- 支持带下划线的数值,如 int a = 100000000;,0 太多不便于人阅读,这个版本支持这样写 int a = 100_000_000,这样就对数值一目了然了。
- Swing 组件增强(JLayer,Nimbus Look Feel…)参考
JAVA8
2014-3-19 发布,oracle 原计划 2013 年发布,由于安全性问题两次跳票,是自 JAVA5 以来最具革命性的版本,主要更新内容:
- 接口改进,接口居然可以定义默认方法实现和静态方法了。
- 引入函数式接口
- 引入 Lambda 表达式
- 引入全新的 Stream API,提供了对值流进行函数式操作。
- 引入新的 Date-Time API
- 引入新的 JavaScrpit 引擎 Nashorn
- 引入 Base64 类库
- 引入并发数组(parallel)
- 添加新的 Java 工具:jjs、jdeps
- JavaFX,一种用在桌面开发领域的技术
- 静态链接 JNI 程序库
JAVA9
2017-9-21 发布
- 模块化(jiqsaw)
- 交互式命令行(JShell)
- 默认垃圾回收期切换为 G1
- 进程操作改进
- 竞争锁性能优化
- 分段代码缓存
- 优化字符串占用空间
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 特性增强提议):
- JEP181: Nest-Based Access Control(基于嵌套的访问控制)
- JEP309: Dynamic Class-File Constants(动态的类文件常量)
- JEP315: Improve Aarch64 Intrinsics(改进 Aarch64 Intrinsics)
- JEP318: Epsilon: A No-Op Garbage Collector(Epsilon 垃圾回收器,又被称为”No-Op(无操作)” 回收器)
- JEP320: Remove the Java EE and CORBA Modules(移除 Java EE 和 CORBA 模块,JavaFX 也已被移除)
- JEP321: HTTP Client (Standard)
7.JEP323: Local-Variable Syntax for Lambda Parameters(用于 Lambda 参数的局部变量语法) - JEP324: Key Agreement with Curve25519 and Curve448(采用 Curve25519 和 Curve448 算法实现的密钥协议)
- JEP327: Unicode 10
- JEP328: Flight Recorder(飞行记录仪)
- JEP329: ChaCha20 and Poly1305 Cryptographic Algorithms(实现 ChaCha20 和 Poly1305 加密算法)
- JEP330: Launch Single-File Source-Code Programs(启动单个 Java 源代码文件的程序)
- JEP331: Low-Overhead Heap Profiling(低开销的堆分配采样方法)
- JEP332: Transport Layer Security (TLS) 1.3(对 TLS 1.3 的支持)
- JEP333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)(ZGC:可伸缩的低延迟垃圾回收器,处于实验性阶段)
- JEP335: Deprecate the Nashorn JavaScript Engine(弃用 Nashorn JavaScript 引擎)
- 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种垃圾收集器小结相关推荐
- JVM学习----七种垃圾收集器(GC)
文章目录 GC垃圾收集器 七种经典的垃圾回收器 查看默认垃圾收集器 新生代 Serial垃圾收集器(单线程. 复制算法) ParNew 垃圾收集器 (Serial的多线程版本. 复制算法) Paral ...
- JVM的7种垃圾收集器
原文地址:Java虚拟机垃圾回收(三) 7种垃圾收集器 Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在<Java虚拟机垃圾回收(一) 基础>中 ...
- 深入理解JVM(3)——7种垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商.版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并 ...
- JVM:7种垃圾收集器
一.Serial收集器(单线程收集器) 这个收集器是一个单线程的收集器,但它的"单线程"的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃 ...
- Java 的七种垃圾收集器
了解 Java 中的内存管理. 用 C 或 C++ 这样的编程语言写一个应用时,需要编写代码来销毁内存中不再需要的对象.当应用程序扩展得越来越复杂时,未使用对象被忽略释放的可能性就越大.这会导致内存泄 ...
- JVM的内存结构,Eden和Survivor比例;JVM中一次完整的GC流程,对象如何晋升到老年代,说说你知道的几种主要的JVM参数;CMS 常见参数解析;.你知道哪几种垃圾收集器,各自的优缺点
47.JVM的内存结构,Eden和Survivor比例 49.JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数 50.-XX:+CMSScavengeBefo ...
- jvm七种垃圾收集器
JVM_七种垃圾收集器介绍 本文中的垃圾收集器研究背景为:HotSpot+JDK7 一.垃圾收集器概述 如上图所示,垃圾回收算法一共有7个,3个属于年轻代.三个属于年老代,G1属于横跨年轻代和年老代的 ...
- 垃圾收集器回收种类 以及七种垃圾收集器
垃圾收集器回收种类 垃圾收集器是垃圾回收算法的具体实现 串行垃圾回收器(Serial) 它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停用户线程 (并行垃圾回收器)Parallel 多个垃圾收集 ...
- 【深入理解JVM】:HotSpot垃圾收集器
相关概念 并发和并行 这两个名词都是并发编程中的概念,在谈论垃圾收集器的上下文语境中,它们可以解释如下. 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态. 并发( ...
最新文章
- 大数据产品不仅仅是IT工具
- Python2 编码问题分析
- chrome浏览器上传文件延迟_扫描识别工具Dynamic Web TWAIN使用教程:移动浏览器捕获(下)...
- CRM问题:导入、导出实体错误
- Python基础教程:默认参数和可变参数
- SpringBoot-@Configuration
- latex 新定义环境 引用_炉石传说:完全虐杀式上分!新版本第二天动物园迅速定义环境!...
- 最优化课堂笔记01: 第一章 最优化的基本概念
- quartus状态机生成_生成器作为(快速失败)状态机
- (转载)【TP5.0】设置session有效时长+修改默认存储路径
- 解决php上传文件过程中Warning move_uploaded_file, failed to open stream的解决方案
- java 高级工程师面试
- 使用Webpack的代码分离实现Vue懒加载(译文)
- 如何在基于Aspect的情感分析中结合BERT和语法信息
- windows2003安装网络打印机的问题(原创,转载请注明)
- 让计算机工作起来教学反思,计算机教学反思
- Mysql 设置问题,当使用一些开源的软件动态安装MYSQL数据库后,发现里面的中文全是乱码。...
- Lucene的几种分词系统
- 四级网络工程师试题一
- uni-app 启动页控制