首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用java 10的应用程序类-数据共享功能?

如何使用java 10的应用程序类-数据共享功能?
EN

Stack Overflow用户
提问于 2018-06-01 05:00:53
回答 2查看 4.7K关注 0票数 20

我在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,或者是否有一些限制?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-01 20:50:20

创建和使用带有应用程序类数据的存档有三个基本步骤(有关更多详细信息,请阅读my post about application class-data sharing):

  1. 创建要包含在归档中的类的列表:

java -XX:+UseAppCDS -XX:DumpLoadedClassList=classes.lst -jar app.jar

  • Creating an archive:

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

请记住以下几点:

  • 创建归档文件时,不能使用通配符或拆分JAR作为类路径

用于启动应用程序的类路径必须具有用于创建归档文件的前缀

  • 如果您有任何问题,请使用-Xlog:class+load (more on -Xlog)获取更多信息
票数 19
EN

Stack Overflow用户

发布于 2018-06-03 02:32:21

AppCDS的JEP示例展示了如何将您的应用程序类添加到共享存档中。至于限制,有几个:

无法将类路径上的目录中存在的

  1. 直类(.class)添加到共享存档中。请看,这个由自定义类加载器加载的thread.
  2. Classes不能添加到共享归档中。查看此thread.

在使用CDS/AppCDS时,还需要注意其他实际注意事项,例如:

  1. 如果更新文件系统上的jar文件,则必须重新创建共享归档文件。
  2. 如果您使用的是在运行时修改/重新转换/重新定义类文件的Java或JVMTI代理,则共享归档将没有用处,因为将从磁盘加载类,因为代理需要实际的类文件数据,而我认为这些数据没有存储在共享归档中。

关于CDS和AppCDS的另一篇很好的详细文章是https://simonis.github.io/cl4cds/

本文的作者还编写了一个tool,它允许共享应用程序类,即使它们是由自定义的类加载器加载的。

如果你对使用CDS感兴趣,你也可以尝试OpenJ9 JVM,它已经有很长一段时间了,而且更加成熟和完善。有关它的更多信息,请阅读here

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50632719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档