La question n'est pas significative, du moins pas sans contexte supplémentaire.
La notion de « taille » en Java est seulement assez bien défini pour les primitives: Un octet est 8 bits (sans surprise) un int
est 32 bits, un long
64bit, etc. (voir, par exemple http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html pour une liste complète).
Pour les instances de l'objet, il est plus compliqué, parce que:
- instances d'objets peuvent (et le plus souvent se) contiennent des références à d'autres instances en interne, vous devez donc décider de compter ces instances dépendantes, et comment. Que faire si plusieurs instances partagent une dépendance?
- Parfois, des instances d'objet peuvent être réutilisées (par exemple, l'internalisation de
java.lang.String
, voir http://en.wikipedia.org/wiki/String_interning). Donc, si vous utilisez x objets de taille y, la taille totale peut être inférieure à x * y
- La JVM dispose de beaucoup de latitude pour implémenter des objets et des instances en interne. Il peut utiliser différentes techniques pour différentes instances (par exemple, le partage de structures de données internes), de sorte qu'il peut ne pas y avoir de "taille" significative à assigner à un seul objet.
Peut-être que vous pourriez expliquer pourquoi vous êtes intéressé par les tailles d'objet. Il existe quelques règles empiriques pour estimer la mémoire heap utilisée par les instances (par exemple, dans la JVM Sun, une instance java.lang.Object
utilise 8 octets), mais celles-ci dépendent de la JVM que vous utilisez.
Généralement, si vous voulez connaître l'utilisation de votre tas, utilisez un profileur de mémoire/tas.
Edit:
Eh bien, il y a (au JDK 6) un moyen d'obtenir une approximation de la quantité de mémoire utilisée par un objet: http://download.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getObjectSize%28java.lang.Object%29
Il est encore qu'une approximation ..
Pourquoi avez-vous besoin de connaître la taille de l'objet? –
Si vous avez vraiment besoin de savoir ... http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-an-object –
Considérons le scénario où nous avons une mémoire limitée et où l'application a de multiples objets prenant de l'espace, comment pourrions-nous alors identifier quel objet prend plus d'espace et gérer en conséquence. – daydreamer