Les machines virtuelles diffèrent dans la façon dont elles stockent les variables, etc. La plupart des machines virtuelles 32 bits sont similaires. Vous pouvez probablement estimer la taille peu profonde d'une instance de classe comme ceci:
sizeInBytes = C + 4 * (fieldCount)
Où C est une constante. Ceci est dû au fait que tous les champs reçoivent généralement une largeur de mot qui est souvent de 4 octets en interne par rapport à la JVM. La taille profonde de la classe est plus difficile à calculer, mais fondamentalement, vous ajoutez récursivement la taille de chaque objet référent. Les tableaux sont généralement 1*arr.length
octets de taille pour les booléens et les octets, 2*arr.length
pour les caractères et les shorts, 4*arr.length
pour les ints et les flotteurs, et 8*arr.length
pour les doubles et les longs.
La manière la plus simple d'obtenir une estimation au moment de l'exécution consiste à mesurer la façon dont Runtime.freeMemory()
change lorsque vous instanciez des objets de votre classe. Rien de tout cela ne devrait être utilisé pour la logique du programme bien sûr; juste pour peaufiner JVM ou la curiosité.
qui est la taille de l'objet, non? pas la taille de la classe (avec le code d'octet pour les définitions de méthodes et autres) – Thilo
Que voulez-vous faire avec les nombres? Il y mai être un moyen de faire ce que vous voulez sans avoir à connaître la taille explicite ... –
Possible depuis Java 5 en utilisant java.lang.instrument.Instrumentation –