2009-07-16 18 views
3

Ich habe einige Java-Software mit Heap-Dumps Profilerstellung und es gibt 350 Instanzen von sun.font.TrueTypeFont, in anderen Heap-Dumps, die ich genommen habe, gab es mehr. Es gibt nur 5 Instanzen von Font, die vom App-Code erstellt wurden, und insgesamt 24 Instanzen, die größtenteils von WDesktopProperties und anderen Java-Bibliotheksklassen erstellt wurden.sun.font.TrueTypeFont Speicherleck?

Ist diese Anzahl von TrueTypeFont-Instanzen typisch für eine ziemlich große Desktop-App? Wenn ja, warum? Der FontManager benötigt fast 200kb RAM!

Danke,

Andy

+2

200kb RAM? Wen interessiert das? –

+1

Alle Softwareingenieure sollten sich um den Speicherverbrauch kümmern. A "Wen kümmert es?" Einstellung ist der Grund, warum Java-Apps oft mindestens 100 MB benötigen. Der andere Grund ist, wenn nach 10 Minuten Nutzung gibt es 350 Instanzen dann wie viele nach einer Woche? –

Antwort

1

wahrscheinlich die meisten, ist etwas GraphicsEnvironment.getAllFonts() aufrufen. Ein Aufruf dazu wird eine 1-Punkt-Schriftart in jeder installierten Schriftart zuweisen. Der tatsächliche Speicherverbrauch hängt von der Anzahl der verfügbaren Schriftarten ab, wird jedoch nicht erhöht, da sie nur einmal zugewiesen werden. Es ist mehr Arbeit zu analysieren, aber eine Alternative ist, GraphicsEnvironment.getAvailableFontFamilyNames() zu verwenden, da das nur den Namen zurückgibt, ohne alle Schriftarten zu instanziieren.