jvm如何使用Java10的应用程序类数据共享功能?
我在Oracle文档https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html中读到有关CD的内容
我所了解的是,加载jvm所需的系统类文件经过解析、验证,然后存储在jre/lib/[arch]/client/classes的归档文件中。jsa。此外,它们还为jvm提供内存映射,因此jvm根据归档中提供的映射信息直接映射内存。因此,这减少了每次jvm实例启动时类加载的开销。如果你错了,请纠正我
现在来看Java10,我如何为我的应用程序代码实现这一点? 第二,完整的申请代码是否符合CD的资格,或者是否有一些限制
# 1 楼答案
创建和使用带有应用程序类数据的存档有三个基本步骤(有关更多详细信息,请阅读my post about application class-data sharing):
创建要包含在存档中的类列表:
创建存档:
使用存档:
请记住以下几点:
-Xlog:class+load
(more on ^{# 2 楼答案
appcd的JEP示例展示了如何将应用程序类添加到共享存档中。 至于限制,有几个:
在使用CD/AppCD时,还需要注意其他一些实际注意事项,例如:
另一篇关于CD和AppCD的精彩而详细的文章是https://simonis.github.io/cl4cds/
本文作者还编写了一个tool,允许共享应用程序类,即使它们是由自定义类装入器装入的
如果你对使用CD感兴趣,你也可以尝试OpenJ9 JVM,它有这个功能已经很长时间了,而且更加成熟和完整。阅读更多关于它的信息