如何在运行时获取一个 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[]实例对象。
1
yidinghe 288 天前 via Android
将这个类设计为单例模式就可以了。
|
2
RedBeanIce 288 天前
感谢,不过很少需要这种场景。
|
3
liubsyy OP @yidinghe @RedBeanIce 使用场景是,一需要获取一些库中的对象引用,但是这个库又没有维护引用或者获取引用非常复杂,又不想修改库的源代码,通过这种方式就很方便
|
4
Aresxue 288 天前
想法挺好,就是已经有这样的轮子了
<dependency> <groupId>com.taobao.arthas</groupId> <artifactId>arthas-vmtool</artifactId> <version>3.7.2</version> </dependency> 而且 arthas 已经经过大规模使用验证了 |
6
vczyh 274 天前
学习学习
|