【发布时间】:2019-03-09 03:04:34
【问题描述】:
假设有一个巨大的物体,它包含大量其他巨大的物体作为它的属性,但一个属性是一个非常小的物体。
class HugeObject
{
private HugeObject1 x1;
private HugeObject2 x2;
:
:
private HugeObject1000 x1000;
private SmallObject1 s1;
public SmallObject1 getSmallObject()
{
return s1;
}
}
下面的代码sn -p会根据小对象(SmallObject1)创建一个新对象。 runThis() 例程中的 HugeObject 超出范围,但返回了 SmallObject1 属性。
public class Test
{
public static void main(String[] args)
{
SmallOjbect1 so = runThis();
//Application continues to run here for a long time.
}
public SmallObject1 runThis()
{
HugeObject ho = new HugeObject();
:
//Do some calculations, call other procedures....
return ho.getSmallObject();
}
}
这种情况是只有SmallObject1保留在内存中还是HugeObject也在内存中,因为SmallObject1是它的属性。
尽管HugeObject 超出范围,但我不确定它是否会保留在内存中,因为它的一个属性仍在内存中。
【问题讨论】:
标签: java memory memory-leaks