2009-07-16 5 views
3

J'ai profilé quelques logiciels Java en utilisant des tas de tas et il y a 350 instances de sun.font.TrueTypeFont, dans d'autres dumps que j'ai pris il y en a eu plus. Il n'y a que 5 instances de polices créées par le code de l'application, et 24 instances en tout, principalement créées par WDesktopProperties et d'autres classes de bibliothèques Java.sun.font.TrueTypeFont Fuite de mémoire?

Ce nombre d'instances TrueTypeFont est-il typique d'une application de bureau assez volumineuse? Si oui, alors pourquoi? Le FontManager prend près de 200kb de RAM!

Merci,

Andy

+2

200kb de RAM? On s'en fout? –

+1

Tous les ingénieurs logiciels devraient se soucier de la consommation de mémoire. Un 'qui s'en soucie?' attitude est la raison pour laquelle les applications Java prennent souvent 100mb minimum. L'autre raison est si après 10 minutes d'utilisation il y a 350 instances alors combien après une semaine? –

Répondre

1

Très probablement, quelque chose appelle GraphicsEnvironment.getAllFonts(). Un appel à cela va allouer une police de 1 point dans chaque police installée. La consommation de mémoire réelle dépendra du nombre de polices disponibles, mais elle ne sera pas augmentée car elles ne sont allouées qu'une seule fois. C'est plus de travail à analyser, mais une alternative est d'utiliser GraphicsEnvironment.getAvailableFontFamilyNames() car cela retourne juste le nom sans instancier aucune police.