Bunu bulmak için Java enstrümantasyonuna bakmak isteyebilirsiniz. Here, bunun bir örneğidir.
Sizin durumunuzda, uygulamanızla ilgili nesnelerin boyutunu bulmak istediğinize inandığınız için, uygulamadan erişebilmeniz için Instrumentation nesnesini global olarak (static
) kullanıma hazır hale getireceksiniz. bağlantı kopyalanan
Kodu: Ancak
public class MyAgent {
private static volatile Instrumentation globalInstr;
public static void premain(String args, Instrumentation inst) {
globalInstr = inst;
}
public static long getObjectSize(Object obj) {
if (globalInstr == null)
throw new IllegalStateException("Agent not initted");
return globalInstr.getObjectSize(obj);
}
}
, ben sadece nesneleri (değil ilkel türleri, aynı zamanda size bunları öğrenmek için gerekmez boyutunu bulmak mümkün olacağına inanıyoruz zaten getObjectSize() metodu geçirilen nesne tarafından başvurulan başka nesneler tarafından kullanılan bellek içermez) :-)
not onları tanımak. Örneğin, nesne bir Ob için bir başvuru varsa ject B, sonra Object A bildirilen bellek kullanımı, gerçek nesne değil, yalnızca Object B (genellikle 4 bayt) referansı için gereken baytları içerecektir.
("ana" bir nesne tarafından başvurulan "subobjects" veya nesneleri içeren ie) bir nesnenin bellek kullanımı bir "derin" sayımını almak için daha sonra beta indirilebilir Classmexer ajan kullanabilir this sitesinden.
Makineye göre farklılık göstermiyorlar ancak java'da hiçbir boyut kullanıcısı yok. Bu, – Cratylus