0

例如,

if 方法返回大量数据,例如:

Data[] data = getData(); //will return 100Mb. Java memory usage increased by 100

如果我们在没有分配数据的情况下调用 getData,java 会使用这 100Mb 吗?

getData(); //returns huge data but we don't assign it to var. Memory usage wasn't increased
4

4 回答 4

3

是的。Data[]data 只是对数据的引用。所以它将使用100MB。

但是,如果您没有将返回的数据分配给任何变量并且它没有任何其他引用,则数据将很快被垃圾收集并释放内存。

于 2012-12-14T11:12:30.497 回答
3

是的,即使我们没有将数据分配给任何变量,数据也会被调用。变量仅用于引用该值。

例子:

使用变量

Object a = getData();
otherFunction1(a);  //calling any other using variable reference

不使用变量

otherFunction1(getData());  //calling any other using variable reference

不同之处在于我们没有引用 getData() 的值。因此,如果我们有任何其他函数,比如 otherFunction2,我们可以将值传递为:

例如1:

otherFunction2(a)

例如 2

otherFunction2(getData()) //need to recall the function getData()

谢谢

于 2012-12-14T11:18:00.080 回答
2

赋值本身不使用任何内存,创建这些对象会。所以如果你的方法创建了一个 100MB 的对象,那么这个内存需求不会减少。但是如果你不分配它,它会很快被垃圾收集(除非它被保留在其他地方)。

于 2012-12-14T11:12:14.037 回答
0

丢弃对象不会增加内存使用量,只会减少它。这是因为 GC 后使用的内存是被引用的对象的内存。更少引用的对象意味着更少的内存使用。

顺便说一句,100 MB 的 PC 内存成本约为 0.30 美元,并且可以重复使用,所以不是“巨大的”恕我直言。

于 2012-12-14T11:18:02.333 回答