JDK13-CDS数据共享

引言

CDS(class-data sharing)即应用间共享class-data数据信息。JDK13扩展了应用的CDS实现,可以在程序执行的时候动态的打包class信息。被归档的class包含所有加载到应用中的类,一些依赖的库类,CDS的基层(base-layer)。

###3 归档

Java 13 中对 Java 10 中引入的 应用程序类数据共享进行了进一步的简化、改进和扩展,即:允许在 Java 应用程序执行结束时动态进行类归档,具体能够被归档的类包括:所有已被加载,但不属于默认基层 CDS 的应用程序类和引用类库中的类。通过这种改进,可以提高应用程序类-数据使用上的简易性,减少在使用类-数据存档中需要为应用程序创建类加载列表的必要,简化使用类-数据共享的步骤,以便更简单、便捷地使用 CDS 存档。

数据共享

在 Java 中,如果要执行一个类,首先需要将类编译成对应的字节码文件,以下是 JVM 装载、执行等需要的一系列准备步骤:假设给定一个类名,JVM 将在磁盘上查找到该类对应的字节码文件,并将其进行加载,验证字节码文件,准备,解析,初始化,根据其内部数据结构加载到内存中。

当然,这一连串的操作都需要一些时间,这在 JVM 启动并且需要加载至少几百个甚至是数千个类时,加载时间就尤其明显。

因为Jar包并没有改变,class-data一直都是相同的,每次JVM执行的也是相同的查找、加载、验证动作。

CDS就是让类只做一次上述的验证、加载动作,然后将其打包,继续在运行相同的Jar包时,直接从打包文件中读取数据,或者当前同时运行的JVM实例直接共享一份相同的数据。

在使用归档文件启动时,JVM 将归档文件映射到其对应的内存中,其中包含所需的大多数类,而不需要使用多么复杂的类加载机制。甚至可以在并发运行的 JVM 实例之间共享内存区域,通过这种方式可以释放需要在每个 JVM 实例中创建相同信息时浪费的内存,从而节省了内存空间。

Q:是否可以在不同容器运行的JVM实例之间共享数据?

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页