0

例えば、

メソッドが次のような大量のデータを返す場合:

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 に答える