
如何在运行时获取一个 Java 类的所有对象实例呢?
比如 A 已经 new 了 10 个对象,现在通过 A.class 就能直接获取到这 10 个对象。前提是这个类可能是任何一个类,既不是单例,也不一定是由 Spring 管理,也不提供静态方法,有的时候还不能修改其代码,这里给大家介绍一种底层实现的方式,基于 jvmti ,代码用 C++实现。
先引用 maven 依赖
<dependency> <groupId>io.githubliubsyy</groupId> <artifactId>FindInstancesOfClass</artifactId> <version>1.0.3</version> </dependency> 然后调用 InstancesOfClass.getInstances(Class<?> targetClass)即可获取 Object[]实例对象。
1 yidinghe 2024 年 1 月 17 日 via Android 将这个类设计为单例模式就可以了。 |
2 RedBeanIce 2024 年 1 月 17 日 感谢,不过很少需要这种场景。 |
3 liubsyy OP @yidinghe @RedBeanIce 使用场景是,一需要获取一些库中的对象引用,但是这个库又没有维护引用或者获取引用非常复杂,又不想修改库的源代码,通过这种方式就很方便 |
4 Aresxue 2024 年 1 月 17 日 想法挺好,就是已经有这样的轮子了 <dependency> <groupId>com.taobao.arthas</groupId> <artifactId>arthas-vmtool</artifactId> <version>3.7.2</version> </dependency> 而且 arthas 已经经过大规模使用验证了 |
6 vczyh 2024 年 1 月 31 日 学习学习 |