2009-07-16 11 views
3

私はヒープダンプを使用していくつかのJavaソフトウェアのプロファイリングを行っていますが、sun.font.TrueTypeFontのインスタンスは350個あります。アプリケーションコードによって作成されたFontのインスタンスは5つしかなく、ほとんどすべてがWDesktopPropertiesおよびその他のJavaライブラリクラスによって作成された24のインスタンスです。sun.font.TrueTypeFont Memory Leak?

かなり大きなデスクトップアプリケーションでは、この数のTrueTypeFontインスタンスが標準的ですか?もしそうなら、なぜですか? FontManagerは約200kbのRAMを占有します!

おかげで、

+2

RAMの200kb?誰も気にしない? –

+1

すべてのソフトウェアエンジニアはメモリ消費に注意する必要があります。誰が気にする?態度は、Javaアプリケーションがしばしば最小100MBを取る理由です。 10分後に350インスタンスが使用され、1週間後に何回使用されるのか? –

答えて

1

はほとんどの場合、何かがGraphicsEnvironment.getAllFonts()を呼び出している

アンディ。それを呼び出すと、インストールされているすべての書体に1ポイントのフォントが割り当てられます。実際のメモリ消費量は利用可能なフォントの数に依存しますが、一度だけ割り当てられるために増加することはありません。解析する作業が増えますが、代わりにGraphicsEnvironment.getAvailableFontFamilyNames()を使用すると、フォントをインスタンス化せずに名前を返すだけです。