gpt4 book ai didi

java - Java for循环中的内存泄漏

转载 作者:行者123 更新时间:2023-11-29 08:59:54 25 4
gpt4 key购买 nike

我的问题比较具体,因此很难搜索。我是Java 编程和学习语言。我设计了一个类,称为实验,我在其中定义了所有的通用函数实验和默认参数。

对于每个特定的实验,比如 ExperimentA,然后我将 Experiment 子类化。每次我想运行实验 A 时,我都会创建一个 ExperimentA 的实例,将参数传递给构造函数,然后构造函数会覆盖 Experiment 中定义的默认参数。我有两个问题。我将这两个问题发布在同一个帖子中,因为我认为它们可能相关。

1)以上设计是否合理?最初我想使用接口(interface),但我发现接口(interface)中的值必须是常数,因此不可能覆盖参数。

2) 我在运行多个具有更改参数的相同类型的后续实验时遇到内存泄漏问题。

for(int na:ArrayOfIntegers) {
Experiment e1 = new ExperimentA(na,otherArgs);
Experiment.runExperiment(e1);
}

由于某些原因,即使在将 e1 分配给新的 ExperimentA 对象之后,e1 对象保留的对象仍会在堆中保持 Activity 状态。我知道这是一个非常普遍的问题,但我是 Java 的新手,关于问题可能是什么的一些猜测可能对我有所帮助。

据我所知,我一直在做的唯一不当行为是将 Experiment 中的默认变量设为公开而不是私有(private)并使用 getter,但我看不出在这种情况下这会如何导致任何问题。在执行 runExperiment() 函数并创建另一个 ExperimentA 对象后,基本上没有对 e1 对象的引用。有什么想法吗?

最佳答案

您的 Experiment 类是静态的,您将 e1 传递给它的方法。

runExperiment的内容是什么?例如,您是否有任何代码将参数存储在数组中?

如果有对创建对象的任何引用,则不能对其进行垃圾回收。虽然 Experiment 是静态的,但我认为它的内部结构应该有一些管理例程来清理已经完成的和一次性的实验。

关于java - Java for循环中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18082378/

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