Java(JDK)13新特性之Dynamic CDS Archives
同一个物理机/虚拟机上启动多个JVM时,如果每个虚拟机都单独装载自己需要的所有类,启动成本和内存占用是比较高的,所以引入了CSD(class Data Sharing)通过一些核心类在每个JVM间共享,每个JVM只需要装载自己的应用类,启动时间较少了,另外核心类是共享的,所以JVM的内存占用也减少了.
CDS只能作用于Boot Class Loader加载的类,不能作用于App Class Loader 或者自定义的Class Loader加载的类.
在java10中,则将CDS扩展为AppCDS,AppCDS不止能够作用于Boot Class Loader,App Class Loader和自定义的Class Loader也能够起作用,大大加大了CDS的适用范围,也就是开发的自定义的类也可以装载给多个JVM共享了.
Java 10包含JEP310的通过跨不同Java进程共享公共类源数据减少了内存的占用和改进了启动时间.
但是,JEP310中,使用AppCDS的过程还是比较复杂的,需要下面的步骤
1:决定要Dump 哪些Class
2:将类的内存Dump到归档文件中
3:使用Dump出来的归档文件加快应用的启动速度
这一次的Java13中的JEP350在310的基础上,又做了一些扩展,允许java应用程序执行结束时动态归档类,归档类将包括默认的基础层CDS存档中不存在的所有已加载的应用程序类和库类.
也就是说,在Java 13中再使用AppCDS的时候,就不在需要这么复杂了。