gpt4 book ai didi

java - 在java中,是否可以在执行过程中的任何特定时间点找到内存堆上的当前对象?

转载 作者:行者123 更新时间:2023-12-01 19:03:59 25 4
gpt4 key购买 nike

说我有课

class A{
//code for class A
}


class B{
//code for class B
}

class A{
public static void main(String a[]){
//Initialize m instances of A and n instances of B and store each in arrays
//Equate any arbit index in the array to null
}
}

在这种情况下,我的主要目标是在内存中的任意时刻查找 A 类和 B 类的所有 Activity 实例。

我想使用调试器一定可以。

但是,由于某种原因(原因超出了问题的范围),我需要从代码本身内获取实例。因此,我需要一个像

这样的函数
public void getAllActiveInstances(){
//Print values
}
<小时/>

编辑:我不需要实例来对它们进行操作。我只需要知道它们是否存在。这主要是为了调试目的。如果这是不可能的,请解释如何使用调试器执行相同的操作。

最佳答案

简短的回答是否定的,您不应该在任何时候使用 java 查看内存内部。

长的答案是,如果在 GC 收集对象后还有任何方法可以访问该对象,那么您就违反了 GC 只收集执行代码无法以任何方式访问的对象的原则。垃圾收集的内存被释放并返回给程序以执行其想要的任何操作。这意味着,如果您对对象 A 进行了 GC,则允许 java 向该位置写入任意数量的内容,从而破坏该内存块的“A 性”。尝试读取现在存储在该内存块中的对象 B 并假装它是 A 将导致各种问题。

展望 future :为了跟踪您创建的所有类,我建议修改类本身。您的类可以有一个static 容器(如HashMap),并且构造函数将构造的类添加到HashMap 中。但是,请注意,由于您保留了对所有创建的对象的引用,因此垃圾收集永远不会收集这些对象并释放该内存。

关于java - 在java中,是否可以在执行过程中的任何特定时间点找到内存堆上的当前对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10981445/

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