Je travaille sur calculaitng la taille [mémoire utilisée] d'un objet java [hashmap]. Il contient des éléments de différents types de données [lors de l'exécution] pour [taille de l'élément-no-de-élém *] n'est pas bonne approche. Le code qu'il fait en ce moment par la série de
if (x) do something else if (primitives) lookup size and calculate
3 Réponses :
Utilisez GetObjectsize () Méthode de l'emballage d'instrumentation. P>
look Voici pour la mise en œuvre Détails: P>
Thnx
La taille sérialisée n'est définitivement pas la voie à suivre, pour deux raisons: p>
Si vous avez besoin de meilleures performances, cela dépendra vraiment de la distribution de vos objets. Une possibilité serait de faire un échantillonnage aléatoire des valeurs sur votre carte, de déterminer une moyenne et de calculer une estimation de cette valeur. p>
Pour obtenir des conseils sur la recherche d'une valeur aléatoire dans un hashmap, voir cette question . p>
Thnx..random Sampling peut être très inexact car la valeur de la carte de hachage peut différer de la taille jusqu'à une large mesure.
Vous pouvez être intéressé par un article que j'ai écrit il y a quelque temps sur Comment calculer la mémoire Utilisation d'un objet Java . Il est certes visé principalement au point d'accès 32 bits, bien qu'il s'agisse d'une grande partie de celle-ci. P>
Vous pouvez également télécharger un simple Agent pour mesurer la taille d'objet Java du même site qui prendra une partie du travail acharné pour vous et devrait travailler dans des environnements 64 bits. P>
Remarque Comme d'autres, je pense que cela a mentionné que la forme sérialisée d'un objet n'est pas identique à sa forme en mémoire, l'utilisation de sérialisation ne convient pas si vous souhaitez mesurer l'empreinte de mémoire avec précision. P>
Qu'est-ce que exactement i> voulez-vous dire par taille? Quantité de mémoire prise? Nombre d'éléments contenus?
par taille, je veux dire la quantité de mémoire prise .. Édition pour refléter que
Question plus ou moins identique: Stackoverflow.com/Questtions/757300/...