像往常一样,很抱歉我的问题是否已经在其他地方提出过...
它很具体,因此很难搜索。我是
编程Java和学习语言。我设计了一堂课
称为实验,在其中我定义了所有的通用功能
实验和默认参数。对于每个特定的实验,说
ExperimentA,然后将子类化为Experiment。每次我想跑步
实验A,我创建了一个ExperimentA实例,将参数传递给
然后,构造函数将覆盖在中定义的默认参数
实验。我有两个问题。我知道他们可能是
不用看代码就很难解决,但是我认为
值得一试。另外,我在同一个帖子中发布了两个问题,因为我认为它们可能是相关的。

1)以上设计合理吗?最初我想使用
接口,但是我发现接口中的值必须是
常数,因此将无法覆盖参数。

2)更紧急和令人困惑的是,当我遇到内存泄漏问题时
更改后运行相同类型的多个后续实验
参数。

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


由于某些原因,即使已将e1分配给新的ExperimentA对象,由e1对象保留的对象仍在堆中保持活动状态。我知道这是一个非常笼统的问题,但是我是Java的新手,因此对可能出现的问题进行一些猜测可能会对我有所帮助。我知道的唯一弊端是将实验中的默认变量设置为public,而不是private和使用getter,但是我看不到在这种情况下这怎么会引起任何问题。在运行runExperiment()函数并创建另一个ExperimentA对象之后,基本上没有对e1对象的引用。有任何想法吗?

先感谢您!

最佳答案

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

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

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

08-04 16:18