JDK13 新特性之 Dynamic CDS
2012 年 7 月 7 日
一年多以前,我写过一篇文章 Java 10 新特性之 AppCDS
,文章的最后有一个结论:
虽然 AppCDS 号称可以支持自定义的 Classloader,但是我试了一个 SpringBoot 的应用,发现对于没有在 -classpath 中指定的 JAR 包中的类,并不会有效果。
在 Java 的世界中,自定义的 Classloader 情况太多了,这个大大限制了 AppCDS 的应用,不过,这次看了 JDK13 的 Release Note,很开心看到 JDK13 对 CDS 的功能进行了增强,本次对 CDS 的增强主要是两个方面:
-cp
接下来,我们就尝试一下在 SOFABoot 中使用 Dynamic CDS,首先新建一个 Spring Boot 的应用,并且把 parent 替换为:
com.alipay.sofa sofaboot-dependencies 3.1.5
然后我们可以编译并且启动一下,看下耗时情况:
➜ time java -jar target/dynamiccds-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.0.RELEASE) 2019-10-08 23:16:55.768 INFO 69815 --- [ main] c.e.dynamiccds.DynamiccdsApplication : Starting DynamiccdsApplication v0.0.1-SNAPSHOT on lotus.local with PID 69815 (/Users/khotyn/Downloads/dynamiccds/target/dynamiccds-0.0.1-SNAPSHOT.jar started by khotyn in /Users/khotyn/Downloads/dynamiccds) 2019-10-08 23:16:55.772 INFO 69815 --- [ main] c.e.dynamiccds.DynamiccdsApplication : No active profile set, falling back to default profiles: default 2019-10-08 23:16:56.377 INFO 69815 --- [ main] c.e.dynamiccds.DynamiccdsApplication : Started DynamiccdsApplication in 0.981 seconds (JVM running for 1.411) java -jar target/dynamiccds-0.0.1-SNAPSHOT.jar 4.14s user 0.29s system 301% cpu 1.473 total
耗时时间是 4.14s。
然后我们用如下的命令生成一下 Class 的 Dump:
java -XX:ArchiveClassesAtExit=dcds.jsa -jar target/dynamiccds-0.0.1-SNAPSHOT.jar
然后我们再执行以下命令就可以使用刚才 Dump 出来的文件了:
time java -XX:SharedArchiveFile=dcds.jsa -jar target/dynamiccds-0.0.1-SNAPSHOT.jar
可以看下输出:
➜ time java -XX:SharedArchiveFile=dcds.jsa -jar target/dynamiccds-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.0.RELEASE) 2019-10-08 23:20:44.078 INFO 70738 --- [ main] c.e.dynamiccds.DynamiccdsApplication : Starting DynamiccdsApplication v0.0.1-SNAPSHOT on lotus.local with PID 70738 (/Users/khotyn/Downloads/dynamiccds/target/dynamiccds-0.0.1-SNAPSHOT.jar started by khotyn in /Users/khotyn/Downloads/dynamiccds) 2019-10-08 23:20:44.083 INFO 70738 --- [ main] c.e.dynamiccds.DynamiccdsApplication : No active profile set, falling back to default profiles: default 2019-10-08 23:20:44.636 INFO 70738 --- [ main] c.e.dynamiccds.DynamiccdsApplication : Started DynamiccdsApplication in 0.91 seconds (JVM running for 1.462) java -XX:SharedArchiveFile=dcds.jsa -jar target/dynamiccds-0.0.1-SNAPSHOT.jar 2.94s user 0.30s system 210% cpu 1.540 total
耗时是 2.94s,时间快了将近一秒多,这个时间可能相比于有大量业务逻辑的应用来说意义不大,但是也算是非常可观了。