gpt4 book ai didi

java - "Not linked"在 Dynamic CDS Archive 日志中意味着什么?

转载 作者:行者123 更新时间:2023-12-05 03:58:21 25 4
gpt4 key购买 nike

我正在尝试使用 JDK 13 的 JEP-350 “动态 CDS 文件”与真实(非学术)application .
为此,我添加了 -XX:ArchiveClassesAtExit=-Xlog:class+load=debug-Xlog:cds=debug JVM我的应用程序启动脚本的选项。当应用程序完成并且 HotSpot 开始创建共享存档时,日志中会填充大量警告,例如:

[215.210s][warning][cds] Skipping tech/toparvion/analog/remote/agent/si/ContainerTargetFile: Not linked

但类加载日志中的同一个类没有任何可疑之处:

[121.323s][info ][class,load] tech.toparvion.analog.remote.agent.si.ContainerTargetFile source: file:/E:/Issues/Temp/deploy-v0.12/lib/analog/lib/analog.slim.jar
[121.323s][debug][class,load] klass: 0x0000000801072ce0 super: 0x00000008002ea5e0 loader: [loader data: 0x000001dc2aba5eb0 for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x0000000702300000}] bytes: 1305 checksum: 1645a974

应用程序使用的总类数为 10566 个(包括大约 500 个生成类),其中有 1824 个这样的跳过类(包括应用程序和库)。我知道远不是所有的类(class)都可以放入共享存档,但在这里我得到 ≈18% 的跳过类(class),这似乎严重缺乏 CDS 效率。

所以问题是:

  1. 为什么逃课?
  2. 我应该怎么做才能避免跳过并将它们包含到存档中?

更新
我用静态 AppCDS 存档重复了相同的实验并且它起作用了,即 ContainerTargetFile 类已成功存储到共享存档以及数百个其他类中。因此,上述问题似乎只涉及 Dynamic CDS Archives。

最佳答案

我在测试此功能时也有类似的经历。由于“未链接”的原因,几乎所有类(class)都被跳过了。对 openjdk 的进一步搜索产生了一个有趣的问题,其中包含指向源代码的链接。如果您检查 should_be_excluded 函数,会有一些有用的注释解释排除、它们的基本原理和限制。特别是 JVM 退出时的链接似乎存在问题,即 ArchiveClassesAtExit 发生时。

https://bugs.openjdk.java.net/browse/JDK-8232081

http://hg.openjdk.java.net/jdk/jdk/file/23a06a5eeddd/src/hotspot/share/classfile/systemDictionaryShared.cpp#l1081 http://hg.openjdk.java.net/jdk/jdk/file/23a06a5eeddd/src/hotspot/share/classfile/systemDictionaryShared.cpp#l1116

关于java - "Not linked"在 Dynamic CDS Archive 日志中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58072964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com