我在Oracle文档https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html中读到了CDS
我所理解的是,加载jvm所需的系统类文件经过解析、验证,然后存储在位于jre/lib/arch/client/classes.jsa的归档中。此外,它们还为jvm提供了自己的内存映射,因此jvm根据归档文件中给出的映射信息直接映射内存。因此,这减少了每次启动jvm实例时加载类的开销。如果错了,请纠正我。
现在来看看java10,我该如何在我的应用程序代码中实现这一点呢?其次,完整的应用程序代码是否有资格用于CDS,或者是否有一些限制?
发布于 2018-06-01 20:50:20
创建和使用带有应用程序类数据的存档有三个基本步骤(有关更多详细信息,请阅读my post about application class-data sharing):
java -XX:+UseAppCDS -XX:DumpLoadedClassList=classes.lst -jar app.jar
java -XX:+UseAppCDS -Xshare:dump -XX:SharedClassListFile=classes.lst -XX:SharedArchiveFile=app-cds.jsa --使用归档文件的类路径app.jar
java -XX:+UseAppCDS -Xshare:on -XX:SharedArchiveFile= -jar -cds.jsa app.jar
请记住以下几点:
用于启动应用程序的类路径必须具有用于创建归档文件的前缀
-Xlog:class+load
(more on -Xlog
)获取更多信息发布于 2018-06-03 02:32:21
AppCDS的JEP示例展示了如何将您的应用程序类添加到共享存档中。至于限制,有几个:
无法将类路径上的目录中存在的
在使用CDS/AppCDS时,还需要注意其他实际注意事项,例如:
关于CDS和AppCDS的另一篇很好的详细文章是https://simonis.github.io/cl4cds/。
本文的作者还编写了一个tool,它允许共享应用程序类,即使它们是由自定义的类加载器加载的。
如果你对使用CDS感兴趣,你也可以尝试OpenJ9 JVM,它已经有很长一段时间了,而且更加成熟和完善。有关它的更多信息,请阅读here。
https://stackoverflow.com/questions/50632719
复制相似问题