You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java 10中使用Application Class-Data Sharing特性?有何限制?

你的理解完全正确!CDS(类数据共享)的核心就是把预解析、验证完成的类(早期仅支持系统类)归档成内存映射文件,让JVM启动时直接复用这些已处理好的类数据,大幅削减类加载阶段的时间开销。在Java 10中,CDS扩展出了**应用类数据共享(AppCDS)**功能,终于能把我们自己的应用代码也纳入CDS的优化范围了。

Java 10中为应用代码实现CDS的步骤

实现应用类的CDS优化分为两个核心步骤:

1. 生成应用类归档文件

首先需要运行一次你的应用,让JVM记录下需要归档的应用类集合。启动时要开启AppCDS支持,并指定归档文件的输出路径:

java -XX:+UseAppCDS -XX:+ArchiveClassesAtExit=my_app_cds.jsa -cp /path/to/your/app/classes com.yourcompany.YourMainClass

当应用正常退出后,JVM会把本次运行过程中加载的所有符合条件的应用类(排除系统类)写入到my_app_cds.jsa文件中。

2. 使用归档文件启动应用

后续启动应用时,只需要指定使用这个预生成的归档文件,就能享受CDS的加速效果:

java -XX:+UseAppCDS -XX:SharedArchiveFile=my_app_cds.jsa -cp /path/to/your/app/classes com.yourcompany.YourMainClass

此时JVM会直接从归档文件中加载预处理好的类,跳过解析、验证、准备等耗时的类加载步骤,显著提升启动速度。

应用代码使用CDS的限制

不是所有应用代码都能享受CDS优化,主要有以下几类限制:

  • 动态生成的类不支持:比如通过ASM、CGLIB等字节码框架动态生成的类,或者JSP运行时编译生成的类,这类动态类无法被归档,也无法从CDS加载。
  • 跨环境不兼容:CDS归档文件和生成它的JVM版本、操作系统架构强绑定,不能在不同版本的JVM或不同架构的系统上复用。
  • 类路径必须完全匹配:启动应用时的类路径必须和生成归档文件时的类路径完全一致,包括路径顺序、依赖包版本,否则JVM会回退到正常的类加载流程。
  • 自定义类加载器加载的类不支持:Java 10的AppCDS仅支持系统类加载器(bootstrap class loader)和扩展类加载器加载的类,自定义类加载器加载的类无法被归档。
  • 特殊类限制:带有native方法的应用类(系统类除外)、未被标准化的类文件(比如不符合Java字节码规范的),也无法被纳入CDS归档。

内容的提问来源于stack exchange,提问作者Shubham Kadlag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:52:35