例如,
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
是的。Data[]
data 只是对数据的引用。所以它将使用100MB。
但是,如果您没有将返回的数据分配给任何变量并且它没有任何其他引用,则数据将很快被垃圾收集并释放内存。
是的,即使我们没有将数据分配给任何变量,数据也会被调用。变量仅用于引用该值。
例子:
使用变量
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()
谢谢
赋值本身不使用任何内存,创建这些对象会。所以如果你的方法创建了一个 100MB 的对象,那么这个内存需求不会减少。但是如果你不分配它,它会很快被垃圾收集(除非它被保留在其他地方)。
丢弃对象不会增加内存使用量,只会减少它。这是因为 GC 后使用的内存是被引用的对象的内存。更少引用的对象意味着更少的内存使用。
顺便说一句,100 MB 的 PC 内存成本约为 0.30 美元,并且可以重复使用,所以不是“巨大的”恕我直言。