以下の2つのテストメソッドを作成しました。文字列のオブジェクトサイズを測定するJava
private static long usedMem = 0;
private static long newUsedMem = 0;
public static long getSize() {
System.gc();
usedMem = Runtime.getRuntime().totalMemory()
- Runtime.getRuntime().freeMemory();
String s = "test";
String y = "testabcd";
System.gc();
newUsedMem = Runtime.getRuntime().totalMemory()
- Runtime.getRuntime().freeMemory();
return newUsedMem - usedMem;
}
public static long getSize2() {
System.gc();
usedMem = Runtime.getRuntime().totalMemory()
- Runtime.getRuntime().freeMemory();
String s = "test";
String y = s+"abcd";
System.gc();
newUsedMem = Runtime.getRuntime().totalMemory()
- Runtime.getRuntime().freeMemory();
return newUsedMem - usedMem;
}
String xとString yのサイズを測定するので、どちらのメソッドも同じ結果をもたらすはずです。しかし、最初のメソッドは常に0を返す一方、2番目のメソッドは常に56を返します(私は各メソッドをループで10回実行して、System.gc()
が動作していることを確認しています)。
もう一つ注目すべきは、第一の方法では、関係なく、文字列sとyが、結果は常に0
ですされてどのくらい誰かが私に違いを説明できませんでしたか?
私はMemoryUtilクラスを使用しようとしたときにテストを思いつき、いくつかの相違を観察しました。 私のクラスは次のとおりです。 'public class Person { String firstName =" Alice "; 文字列lastName = "Bob"; } ' ' Person'オブジェクトのサイズを初期化したが結果が一致していないときに 'Person'オブジェクトのサイズを測定するために、' MemoryUtil'と ''実行時間 'の測定値を使用しました。 –