【发布时间】:2019-06-25 21:55:30
【问题描述】:
我在 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 实例启动时类加载的开销。如有错误请指正。
现在来到 java 10,我怎样才能为我的应用程序代码实现这一点? 其次,完整的应用程序代码是否有资格获得 CDS 或有一些限制?
【问题讨论】:
-
“我们为什么不把完整的应用程序代码编译成原生代码”——你熟悉 Graal 吗?
-
@Jacob 所以现在我读到了 graal,它是关于提前编译的。所以它减少了运行时编译开销。
-
CDS 不会将类编译为本机代码。它宁可预加载(解析、验证等)某些类,并将它们以二进制形式存储在文件中,从而允许将图像直接映射到 JVM 的地址空间。
-
@apangin 感谢您的解释。我现在阅读了更多关于 CDS 的内容,我想我现在有了一个更好的主意。我现在已经编辑了这个问题。非常感谢您的意见。