像往常一样,如果我的问题已经在其他地方被请求,我很抱歉... 它是相当具体的,因此很难搜索。我是 编程Java和学习语言。我设计了一个名为 的实验,其中我为所有 实验和默认参数定义了常用函数。对于每个特定实验,例如 ExperimentA,然后我将实验分为子类。每次我想运行 实验A时,我创建一个ExperimentA实例,将参数传递给 构造函数,然后覆盖 实验中定义的默认参数。我有两个问题。我知道他们可能是 难以解决没有看代码,但我认为它 值得一试。此外,我在相同的帖子中发布了两个问题,因为我认为它们可能是相关的。Java for循环中的内存泄漏
1)上述设计合理吗?起初我想用 接口,但我发现接口中的值必须是 不变,因此覆盖参数是不可能的。
2)更加迫切和令人费解的是,当 运行多个相同类型的后续实验并更改了 参数时,我遇到了内存泄漏问题。由E1对象中保留了
for(int na:ArrayOfIntegers) {
Experiment e1 = new ExperimentA(na,otherArgs);
Experiment.runExperiment(e1);
}
由于种种原因,对象是在E1已被分配到一个新的ExperimentA对象即使堆维持生命。我知道这是一个非常普遍的问题,但我对Java很陌生,有些猜测问题可能会对我有帮助。我一直在做的唯一一个我所知道的做法是在Experiment中公开默认变量,而不是私有和使用getter,但我不明白在这种情况下应该如何引发任何问题。基本上,在runExperiment()函数执行完成并创建另一个ExperimentA对象后,没有对e1对象的引用。有任何想法吗?
预先感谢您!
看看[这个问题](http://stackoverflow.com/questions/13531004/java-outofmemoryerror-strange-behaviour) –
你究竟知道对象是如何保持活着?你用堆检查什么? – Sethiel
我使用内存分析工具,并去泄漏的嫌疑人报告。 – onkel