如果我们不从方法中分配返回值,我们还会增加内存使用量吗?

时间:2012-12-14 11:10:06

标签: java memory

例如,

如果方法返回大量数据,如:

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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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()

由于

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

BTW 100 MB的PC内存价格约为0.30美元并且可以重复使用,所以不是那么“巨大”的恕我直言。