デフォルトのGCを1.6.0_27-b07(SunのJRE)で使用しています。this私はメモリの増加を検出できませんRuntime.getRuntime()。freeMemory()を使用してください。誰かがこれを達成する方法について光を当てることができますか?別のGCを使用する必要がありますか?どれ?Runtime.freeMemory()とGCを使用してJVM上のオブジェクトのインスタンスを追跡する方法
以下の簡単なプログラムは、割り当てられたメモリに対して0を出力します。 :(:(:(
import java.util.HashSet;
import java.util.Set;
public class MemoryUtils {
private static Set<String> set = new HashSet<String>();
public static void main(String[] args) {
long mem = Runtime.getRuntime().freeMemory();
// now create a bunch of objects and save them in the set
for (int i = 0; i < 100; i++) {
set.add("foo" + i);
}
long allocated = mem - Runtime.getRuntime().freeMemory();
System.out.println("Memory allocated: " + allocated); // ===> GIVES 0 !!!!
}
}
I + 'ではなく'「foo」というの(「foo」という+ I) '新しいStringをお試しください'リテラル文字列はStringプールに格納されます。 –
@ Eng.Fouadいいえ、違いはありません。それはDavid Tinkerが言ったことと関係がある。 – chrisapotek
@ Eng.Fouadあなたはおそらく 'intern()'メソッドと混乱しているかもしれませんが、String(String)コンストラクタは参照されるchar []が文字列のサイズと全く同じであることを保証します。 –