如何获取一个类的所有对象实例?

312 天前
 liubsyy

如何在运行时获取一个 Java 类的所有对象实例呢?

比如 A 已经 new 了 10 个对象,现在通过 A.class 就能直接获取到这 10 个对象。前提是这个类可能是任何一个类,既不是单例,也不一定是由 Spring 管理,也不提供静态方法,有的时候还不能修改其代码,这里给大家介绍一种底层实现的方式,基于 jvmti ,代码用 C++实现。

先引用 maven 依赖

<dependency>
   <groupId>io.github.liubsyy</groupId>
  <artifactId>FindInstancesOfClass</artifactId>
   <version>1.0.3</version>
</dependency>

然后调用 InstancesOfClass.getInstances(Class<?> targetClass)即可获取 Object[]实例对象。

详细源码见: https://github.com/Liubsyy/FindInstancesOfClass

1767 次点击
所在节点    Java
6 条回复
yidinghe
311 天前
将这个类设计为单例模式就可以了。
RedBeanIce
311 天前
感谢,不过很少需要这种场景。
liubsyy
311 天前
@yidinghe @RedBeanIce 使用场景是,一需要获取一些库中的对象引用,但是这个库又没有维护引用或者获取引用非常复杂,又不想修改库的源代码,通过这种方式就很方便
Aresxue
311 天前
想法挺好,就是已经有这样的轮子了
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-vmtool</artifactId>
<version>3.7.2</version>
</dependency> 而且 arthas 已经经过大规模使用验证了
liubsyy
311 天前
@Aresxue arthas 这个挺好,不过美中不足的是还得把 dll/so/dylib 也下载下来,我这个 jar 都全部打包了
vczyh
297 天前
学习学习

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1009144

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX