コード (Java で記述) から関数を呼び出していますが、その関数が使用しているメモリの量を知りたいのですが、(呼び出している) 関数にコードを追加できないことに注意してください。
たとえば-
//my code starts
.
.
.
.
myfunc();
//print memory used by myfunc() here
.
.
// my code ends
これを行う方法?
コード (Java で記述) から関数を呼び出していますが、その関数が使用しているメモリの量を知りたいのですが、(呼び出している) 関数にコードを追加できないことに注意してください。
たとえば-
//my code starts
.
.
.
.
myfunc();
//print memory used by myfunc() here
.
.
// my code ends
これを行う方法?
あなたがやろうとしていることは、基本的に無意味です。関数によって使用されるメモリのようなものはありません。関数呼び出しの「前」と「後」の総メモリ使用量を比較するというあなたの考えには意味がありません。増加を「関数によって使用されるメモリ」と見なしたくない)、またはガベージ コレクタが実行されている間にガベージ コレクタが実行され、使用されているmyfunc
メモリの合計が減少する可能性があります。
良い質問には、多くの場合、回答の大部分が含まれています。あなたがすべきことは、正しく質問することです。
私はこのコードで成功しました(動作することは保証されていませんが、試してみると、必要なものが得られる可能性が高くなります):
final Runtime rt = Runtime.getRuntime();
for (int i = 0; i < 3; i++) rt.gc();
final long startSize = rt.totalMemory()-rt.freeMemory();
myFunc();
for (int i = 0; i < 3; i++) rt.gc();
System.out.println("Used memory increased by " +
rt.totalMemory()-rt.freeMemory()-startSize);
しかし、理想的には減算後は常にゼロであるべきなので、それは間違っています。
通常、各スレッドにはTLAB(Thread Local Allocation Buffer)があり、ブロック単位で割り当てるため(各スレッドが同時に割り当てることができるため)、実際にはその権利があります。
これをオフにする-XX:-UseTLAB
と、割り当てられたバイトが表示されます。
この関数を使用すると他のものが実行されている可能性があるため、これを複数回実行する必要があります。