Vous pourriez vouloir regarder l'instrumentation de Java pour découvrir cela. Here est un exemple de la même chose. Dans votre cas, comme je crois que vous voulez trouver la taille des objets de votre application, vous rendrez l'objet Instrumentation disponible globalement (static
) afin que vous puissiez y accéder à partir de votre application.
code Copié à partir du lien:
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);
}
}
Cependant, je crois que vous serez en mesure de trouver la taille des objets seulement (pas les types primitifs, vous ne nécessitent pas de les trouver comme vous déjà les connaître :-))
Notez que la méthode getObjectSize() ne comprend pas la mémoire utilisée par d'autres objets référencés par l'objet passé. par exemple, si objet a est une référence à Ob ject B, alors l'utilisation de la mémoire rapportée de l'objet A inclura seulement les octets nécessaires pour la référence à l'objet B (généralement 4 octets), pas l'objet réel.
Pour obtenir un compte « profond » de l'utilisation de la mémoire d'un objet (ie qui comprend « sous-objets » ou des objets visés par l'objet « principal »), vous pouvez utiliser l'agent Classmexer disponible pour téléchargement bêta à partir du site this.
Ils ne varient pas par machine, mais il n'y a pas d'opérateur sizeof dans java si c'est ce que vous demandez – Cratylus