例如,
如果方法返回大量数据,如:
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
答案 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美元并且可以重复使用,所以不是那么“巨大”的恕我直言。