gpt4 book ai didi

java - 有没有办法在运行时获取正在使用的 Guava 版本?

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:09 24 4
gpt4 key购买 nike

我快速浏览了 Guava 源代码和文档,似乎都没有提到版本。想知道有没有办法在运行时获取Guava的版本信息。

如果实际上不存在这样的东西,则不必通过任何 getter 访问此版本信息;如果它藏在一个字段中,在加载 Guava 时不会进行 GC,那就足够了。

这个版本信息在运行时的任何地方都可用吗?


我对此有一个非常具体的用途。我工作的很大一部分是分析 Java 堆转储,以识别和修复代码中导致过多内存使用的位置。对于此任务,我使用 fasthatjhat 的大量修改版本具有对我的工作有用的特殊功能。

这些功能之一是显示容器的内容。我已经为 ArrayListHashMapConcurrentHashMap 等实现了这一点(我根据需要实现类型打印机,基于什么我在我们的堆转储中遇到过。)目前,我正在为 Guava 的 CustomConcurrentHashMap 实现一个类型打印机。

由于结构的布局在版本之间可能会发生变化,因此我的代码会根据所使用的版本调整其解包行为。例如,在工作中,我们以前使用 JRuby 1.2,但最近切换到 JRuby 1.6,所以我有这两个版本的类型打印机,它根据在堆转储中找到的版本信息来选择版本。

所以,这就是问题第二段的重点:如果版本信息在堆转储中的任何位置,这就是我所需要的。

在有人问之前:堆转储数据不是“实时的”,因此您不能简单地调用 toString 或类似的方法。您确实必须遍历数据结构以提取位,并且您确实必须在第 n 度使用实现细节。 ;-)

最佳答案

如果想获取maven构建的类的版本,可以从类入手,找到它来自的jar,读取maven添加的元信息(比如版本)

如果版本在路径中,则更简单的方法是查看您的类路径,从文件名中找到 guava 和您正在使用的版本。

对于堆转储,类路径位于系统属性中。

关于java - 有没有办法在运行时获取正在使用的 Guava 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7694468/

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