阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布
导读:新版本主要有三大变化:同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新;带来了正式的 feature:G1ElasticHeap;发布了用户期待的 Windows 实验版本 Experimental Windows version。
距离 Dragonwell JDK 第一个正式版本 8.0.0-GA 发布已经过去 3 个月了,项目在 Github 上的 stars 继续攀升达到了 1900。今天我们带来了最新版本 8.1.1-GA 的发布,包含了全新的特性和更新。详情见下文。
龙井 8.1.1-GA 的新变化
新版本里我们同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新,带来了上游稳定版本的最新安全更新和补丁。
在 8.0.0-GA 发布的时候,我们介绍了 Dragonwell 第三个新特性 ElasticHeap 的一些情况,很多用户已经跃跃欲试了,这次发布我们带来了正式的 feature:G1ElasticHeap。能够在不影响 Java 业务运行的前提下,动态节约 Java 进程物理内存。
另外,我们还发布了用户期待的 Windows 实验版本 Experimental Windows version,使用 Windows 开发的小伙伴们可以更加方便的使用 Dragonwell JDK 进行相应的开发工作。
G1ElasticHeap
从 feature 的名字上我们可以看到 ElasticHeap 是基于 G1 GC 开发的,所以想要使用这个功能的小伙伴,需要开启 G1 GC(-XX:+UseG1GC)。在 8.0.0-GA 正式版介绍时,我们介绍了部分技术背景,由于 Java 自动管理内存的特性,整个 Java Heap 的地址空间和物理内存将被 Java 进程占用,即使使用率不高,回收后也并不会归还给操作系统,导致 Java 进程会有较高的常驻内存。
OpenJDK8 的几个常规 GC 算法仅能支持在 Full GC 时,按照一定规则有限缩减 Java 堆,然而 Java 开发的小伙伴们非常清楚,频繁的 Full GC 的 STW(stop-the-world)对 Java 应用意味着什么,长暂停会导致很多不可预期的应用异常和无法响应。

ElasticHeap 可以根据整体 GC 的压力,敏捷地将 Java 堆的物理内存归还给操作系统,没有额外的 STW 对 Java 应用带来的超时异常风险,核心设计有 2 个特别之处:
分别处理 Java Heap 中新区和老区的部分。特别是不少应用为了维持可能高压力下的 GC 吞吐,会保持比较大的 young generation,例如 G1 默认的新区最大值为整堆的 60%。当 young GC 频率不高时,其实 Java 堆面临很大程度的浪费,但却没有办法快速节约这部分内存。假设当新区为整堆 60%,young GC 频率为 90 秒一次。当使用整堆 10% 作为 young generation 时,GC 频率变为 15 秒一次,同样可以满足 Java 正常运行,这样就可以节约 50% 的 Java 堆内存。而当压力变大,GC 频率变高时,会自动检测到变化并且重新 map 内存扩展新区的大小。
使用了并发线程,并发且并行(concurrent and parallel)处理内存归还和重新 map 的工作。因为和 Linux kernel 交互,map/unmap 内存实际上是比较耗时的操作,特别是重新 map 内存后还会有 page fault 的开销,对于一次操作上 G 的内存,很容易消耗上百毫秒,甚至是秒级。因此,如果传统地在 GC STW中 操作内存 map/unmap,Java 应用将可能发生较大的毛刺,这是很多在线服务型应用不可接受的。通过并发线程并行处理 unmap 以及重新 map 后带来的 page fault 的开销,Java 应用线程将不受任何影响。在常规 GC STW 过程中,Java 堆的容量将会及时同步完成。
在 OpenJDK 新的 12 版本中,也引入了周期性触发 G1 concurrent mark 来触发内存的节约机制,但是并没有解决在 STW中map/unmap 的开销问题,也不能快速在 young GC 周期中来发现和处理 young generation 的内存浪费。目前除了在 Dragonwell 8.1.1 中发布,我们同时把 G1ElasticHeap 的 patch 提交给 OpenJDK 社区 review 和讨论,希望将这些创造性的变化加入到最新的 OpenJDK G1 GC 中。

云栖大会上孤尽的演讲,清晰地描述了 ElasticHeap 的使用场景。在双 11 流量剧增的情况下,核心应用 tradeplatform3 迅速的回涨 Java heap 和内存,以保持高流量压力下的稳定。高峰过后,内存逐渐缩减。从集群维度来说,在线 Java 应用占据大量内存,即使在线流量低,cpu 利用率很低,由于内存的占据,集群机器的 cpu 资源依然无法复用。而 ElasticHeap 可以有效降低低压力的在线 Java 应用的内存占用,把内存资源出让一部分运行离线任务,从而突破在线应用集群的资源利用率的内存瓶颈。在本例中,节约了 22.8% 的 Java 进程的物理内存。
想要立刻使用最新特性的小伙伴们,可以通过下面的地址下载最新版本的 Dragonwell JDK 的二进制包。
https://github.com/alibaba/dragonwell8/releases
这里提供了用户指南和发布说明。用户指南的末尾还有支持的钉钉群和邮件。
https://github.com/alibaba/dragonwell8/wiki
如果有小伙伴觉得这个特性符合自身的场景需求好用的话,不妨也向 OpenJDK 社区邮件列表支持我们,让 OpenJDK 听到更多中国 Java 使用者和开发者的声音。
“ 阿里巴巴云原生微信公众号(ID:Alicloudnative)关注微服务、Serverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术公众号。”
本文由博客一文多发平台 OpenWrite 发布!
阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布的更多相关文章
- 阿里开源 Dragonwell JDK 重磅发布 GA 版本:生产环境可用
今年 3 月份,阿里巴巴重磅开源 OpenJDK 长期支持版本 Alibaba Dragonwell的消息,在很长一段时间内都是开发者的讨论焦点,该项目在 Github 上的 Star 数迅速突破 1 ...
- 如何在Oracle官网下载java的JDK最新版本和历史版本
官网上最显眼位置只显示了Java SE的JDK的最新版本下载链接,因为都是英文,如果英文不是很好,寻找之前的JDK版本需要很长时间,而且未必能在那个隐蔽的位置找到之前版本列表. 今天小编来给你详细讲解 ...
- EasyDarwin开源流媒体服务器Golang版本:服务端录像功能发布
EasyDarwin开源流媒体服务器(www.easydarwin.org)现在使用Go版本实现了.最新的代码提交,已经支持了推流(或者拉流)的同时进行本地存储. 本地存储的原理,是在推流的同时启动f ...
- 【转】Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本的开发环境(亲测)
http://blog.csdn.net/ccf19881030/article/details/9204801 很久以前使用博客园博主子龙山人的一篇博文<Cocos2d-x win7+vs20 ...
- jdk 多版本安装 for mac
2016年mac上已经安装有jdk1.6的版本 目录在/Library/Java/JavaVirtualMachines/1.6.0.jdk 有时候mac版本跟新会自动删除jdk1.6 所以要去ma ...
- Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本的开发环境(亲测)
写这篇博客时2D游戏引擎Cocos2d-x的最新版本为2.1.4,记得很久以前使用博客园博主子龙山人的一篇博文<Cocos2d-x win7+vs2010配置图文详解(亲测)>成功配置 ...
- 开源:Taurus.MVC-Java 版本框架 (支持javax.servlet.*和jakarta.servlet.*双系列,内集成微服务客户端)
版本说明: 因为之前有了Taurus.MVC-DotNet 版本框架,因此框架标了-Java后缀. .Net 版本: 开源文章:开源:Taurus.MVC-DotNet 版本框架 (支持.NET C ...
- 何为软件的Alpha、Beta、RC和GA发布版本?
简介 一个软件或者一个功能在发布时,通常会有Beta版这么一说.我很熟悉,差不多知道是什么意思,但没去深究,感觉上就是一个可以用但不保证功能稳定的版本. 直到昨天我看到了 MariaDB 数据库发布标 ...
- 重磅发布:阿里开源 Open JDK 长期支持版本 Alibaba Dragonwell
3 月 21 日北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell.作为 Java 全球管理组织 Java Community Process ...
随机推荐
- python控制台简单实现五子棋
#棋盘#落子#规则import randomclass chess: def __init__(self): print('#---------------棋盘----------------#') ...
- PHP 通过curl POST传递 伪造cookie 传递信息
一些论坛网站需要每日签到太麻烦,于是写了一个Win 的定时任务,通过curl 去处理传递的伪造Cookie 和 header; 有不妥的地方,希望各位大佬们多多指正,谢谢各位大佬: $fp = @fo ...
- Python大佬告诉你:使用Python处理yaml格式的数据简单到爆
一.思考❓❔ 1.什么是yaml? 不是标记语言 对用户极其友好 数据序列化标准 跨语言 所有编程语言都支持 跨平台 所有平台都支持 Windows.linux.Mac 格式简单 比json小姐姐穿得 ...
- Winform中使用FastReport实现自定义PDF打印预览
场景 Winform中使用FastReport实现简单的自定义PDF导出: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1009 ...
- CommonsMultipartFile 转为 File 类型
1.我们可以查看CommonsMultipartFile的源码发现有这样一个方法 @Override public InputStream getInputStream() throws IOExce ...
- 今天遇到 Request failed: method not allowed (405)。 错误,特此在网上翻了翻
Q1: 遇到405请求错误.提示:NSLocalizedDescription=Request failed: method not allowed (405).解决方案:405请求方法不被允许.这时 ...
- charles 外部代理设置
本文参考:charles 外部代理设置 external proxy 外部代理设置 有时候您可能需要使用网络上的代理服务器才能访问Internet. 在这种情况下,您需要为Charles配置外部代理. ...
- Apache Hadoop集群安装(NameNode HA + SPARK + 机架感知)
1.主机规划 序号 主机名 IP地址 角色 1 nn-1 192.168.9.21 NameNode.mr-jobhistory.zookeeper.JournalNode 2 nn-2 ).HA的集 ...
- SpringBoot启动zipkin-server报错Error creating bean with name ‘armeriaServer’
目前,GitHub 上最新 release 版本是 Zipkin 2.12.9,从 2.12.6 版本开始有个较大的更新,迁移使用 Armeria HTTP 引擎. 从此版本开始,若直接添加依赖的 S ...
- ASP.NET Core 3.0 原生DI拓展实现IocManager
昨天.NET Core 3.0 正式发布,创建一个项目运行后发现:原来使用的Autofac在ConfigureServices返回IServiceProvider的这种写法已经不再支持.当然Autof ...