Je veux enregistrer la quantité de mémoire (en octets, si possible) qu'un objet occupe pour un projet (je compare les tailles des structures de données) et il semble qu'il n'existe aucune méthode pour le faire en Java. Apparemment, le C/C++ dispose de sizeOf()
mais cette méthode est inexistante en Java. J'ai essayé d'enregistrer la mémoire libre dans la JVM avec Runtime.getRuntime().freeMemory()
avant et après la création de l'objet, puis en enregistrant la différence, mais elle ne donne que 0 ou 131304, et rien entre les deux, quel que soit le nombre d'éléments de la structure. Aidez-moi, s'il vous plaît !
Il est dit : "La seule façon d'accéder à une instance de l'interface Instrumentation est de lancer la JVM d'une manière qui indique la classe d'agent - voir la spécification du paquet. L'instance d'Instrumentation est transmise à la méthode premain de la classe d'agent. Une fois qu'un agent acquiert l'instance Instrumentation, il peut appeler des méthodes sur l'instance à tout moment. " <-- comment faire (dans Eclipse) ?
6 votes
stackoverflow.com/questions/52353/
1 votes
Vous pouvez essayer totalMemory() et ensuite freeMemory() et les soustraire à la place.
5 votes
Je vous recommande de jeter un coup d'œil à Jbellis JAMM. ( github.com/jbellis/jamm ) Il s'appuie sur l'agent d'instrumentation mentionné ci-dessus mais encapsule quelques utilitaires utiles pour mesurer en profondeur l'empreinte d'un graphe d'objets entier. Cela me semble simple et plutôt cool.