2010-10-25 2 views
1

Dans les structures de données, je sais que la taille de la structure dépend des liens internes d'une section à l'autre. Y at-il un moyen, en dehors de JProfiler pour dire exactement combien de mémoire est liée dans une structure particulière? Par exemple, le projet de classe de ce semestre a trait à l'application de diverses structures à une base de données de chansons. Les projets ont couvert des tableaux, des listes, des listes déroulées et des arbres. Ce que je voudrais faire, c'est voir combien de mémoire est utilisée. Par exemple, une liste chaînée a besoin d'une mémoire de 3N, mais j'aimerais voir combien d'espace occupe un nœud dans mon projet. JProfiler a l'air de fonctionner, mais 500 $ sont hors de ma gamme de prix, et je voudrais l'utiliser pour toutes les structures couvertes ce semestre, pas les trois appliquées jusqu'à présent.Comment déterminer l'utilisation réelle de la mémoire d'une structure de données

Répondre

6

alt text

Utilisez VisualVM. Il vient avec le JDK et vous permet de prendre un instantané du tas.

+0

Merci, cela ressemble à ce que je cherchais. – Jason

+0

Je crois que vous avez laissé un mot ou deux à la fin de votre –

+0

Il semble que j'ai fait LOL merci. Correction –

-2

Utilisez System.getRuntime(). FreeMemory().

Exécutez le garbage collector; Vérifiez la mémoire libre; créez l'un de vos objets; vérifier la mémoire libre; soustraire.

+2

Selon le fonctionnement de la récupération de place, il n'y a aucune garantie que cela produise un montant valide pour la taille d'un objet. Cela ne veut pas dire que ce n'est pas le cas, mais simplement qu'il existe une possibilité toujours présente de vous donner une valeur erronée. – phill

+0

Bien sûr, il n'y a aucune garantie, mais je n'ai jamais entendu parler d'échec en pratique. Avez-vous? – novalis

+0

Depuis Java 8, c'est en fait 'Runtime.getRuntime()' ... peut-être que c'était différent avec les versions précédentes (?). –

1

Le moyen le plus précis est probablement d'utiliser un profileur - utilisez Google pour en trouver des gratuits.

Vous pouvez également essayer la technique dans Do you know your data size?.

1

Je l'ai honnêtement jamais utilisé auparavant, mais il y a une méthode getObjectSize dans le cadre de l'interface Instrumentation qui peut être en mesure de fournir les réponses que vous voulez sans une application tierce. Cela peut ne pas être plus facile que VisualVM, comme l'a suggéré Amir, mais ça ne fait jamais de mal de lire à ce sujet.

Questions connexes