Java12新特性 -- 默认生成类数据共享(CDS)归档文件
默认生成类数据共享(CDS)归档文件
同一个物理机/虚拟机上启动多个JVM时,如果每个虚拟机都单独装载自己需要的所有类,启动成本和内
存占用是比较高的。所以Java团队引入了类数据共享机制 (Class Data Sharing ,简称 CDS) 的概念,通过把一些核心类在每个JVM间共享,每个JVM只需要装载自己的应用类即可。好处是:启动时间减少了,另外核心类是共享的,所以JVM的内存占用也减少了。
历史版本
-
JDK5引入了Class-Data Sharing可以用于多个JVM共享class,提升启动速度,最早只支持system classes及
serial GC。 -
JDK9对其进行扩展以支持application classes及其他GC算法。
-
java10的新特性JEP 310: Application Class-Data Sharing扩展了JDK5引入的Class-Data Sharing,支持
application的Class-Data Sharing并开源出来(以前是commercial feature)- CDS 只能作用于 BootClassLoader 加载的类,不能作用于 AppClassLoader 或者自定义的 ClassLoader加载的类。在 Java 10 中,则将 CDS 扩展为 AppCDS,顾名思义,AppCDS 不止能够作用于BootClassLoader了,AppClassLoader 和自定义的 ClassLoader 也都能够起作用,大大加大了 CDS 的适用范围。也就说开发自定义的类也可以装载给多个JVM共享了。
-
JDK11将-Xshare:off改为默认-Xshare:auto,以更加方便使用CDS特性。
迭代效果
Java 8 以来,在基本 CDS 功能上进行了许多增强、改进,启用 CDS 后应用的启动时间和内存占用量显着
减少。使用 Java 11 早期版本在 64 位 Linux 平台上运行 HelloWorld 进行测试,测试结果显示启动时间缩短有 32%,同时在其他 64 位平台上,也有类似或更高的启动性能提升。
Java12新特性
JDK 12之前,想要利用CDS的用户,即使仅使用JDK中提供的默认类列表,也必须java -Xshare:dump 作为额外的步骤来运行。
Java 12 针对 64 位平台下的 JDK 构建过程进行了增强改进,使其默认生成类数据共享(CDS)归档,以进一步达到改进应用程序的启动时间的目的,同时也避免了需要手动运行:java -Xshare:dump 的需要,修改后的 JDK 将在${JAVA_HOME}/lib/server 目录中生成一份名为classes.jsa的默认archive文件(大概有18M)方便大家使用。
当然如果需要,也可以添加其他 GC 参数,来调整堆大小等,以获得更优的内存分布情况,同时用户也可以像之前一样创建自定义的 CDS 存档文件。
相关文章
- CH579M以太网控制板--多台控制板连接MQTT服务器(控制板使用网线串联)
- 玩转字符串篇--代码自动生成,解放双手
- Android FFmpeg系列09--抽帧与快速抽帧
- 专项测试--性能分析三
- 《前端Serverless:面向全栈的无服务架构实战》-- 1.Serverless综述(笔记)
- Datawhale组队学习 -- Task 2:条件循环结构
- mybatis3源码解析--DefaultSqlSession的非线程安全详解
- 一起学习设计模式--09.组合模式
- CrashHandler--程序异常退出处理
- 副本与ISR设计--Kafka从入门到精通(十四)
- Adobe Acrobat DC 2020 ,随心掌控PDF!--最牛逼的PDF编辑器
- 枚举以及联合体--C语言
- 干货分享--AU软件下载 Au 2021安装教程 au2022下载
- WordPress 数据库探究 #7 -- wp_categories 和 wp_post2cat