Si potrebbe voler guardare la strumentazione Java per scoprirlo. Here è un esempio dello stesso.
Nel tuo caso, poiché ritengo che desideri trovare la dimensione degli oggetti dall'applicazione, renderà l'oggetto Instrumentation disponibile a livello globale (static
) in modo che sia possibile accedervi dall'applicazione.
codice copiato dal link:
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);
}
}
Tuttavia, credo che sarà in grado di trovare la dimensione di soli oggetti (non tipi primitivi, anche non necessari per trovarli fuori, come si già li so :-))
noti che il metodo getObjectSize() non include la memoria utilizzata da altri oggetti a cui fa riferimento l'oggetto passato. ad esempio, se oggetto a ha un riferimento a Ob ject B, quindi l'utilizzo della memoria della memoria segnalata dall'oggetto A includerà solo i byte necessari per il riferimento all'oggetto B (in genere 4 byte), non l'oggetto effettivo.
Per ottenere un conteggio "profonda" del l'utilizzo della memoria di un oggetto (cioè che include "oggetti secondari" o gli oggetti a cui si riferisce l'oggetto "principale"), quindi è possibile utilizzare l'agente Classmexer disponibile per il beta scaricare dal sito this.
Non variano per macchina ma non c'è operatore sizeof in java se questo è quello che stai chiedendo – Cratylus