2009-07-16 4 views
3

Я профилировал некоторые Java-программы, используя кучи кучи, и есть 350 экземпляров sun.font.TrueTypeFont, в других кучах кучи, которые я взял, было больше. Существует только 5 экземпляров шрифта, созданных кодом приложения, и всего 24 экземпляра, в основном созданные WDesktopProperties и другие классы библиотеки Java.sun.font.TrueTypeFont Memory Leak?

Это количество экземпляров TrueTypeFont, типичных для довольно большого настольного приложения? Если да, то почему? FontManager занимает почти 200 КБ оперативной памяти!

Спасибо,

Энди

+2

200kb оперативной памяти? Какая разница? –

+1

Все программисты должны заботиться о потреблении памяти. «Кого волнует?» отношение - причина, по которой Java-приложения часто принимают минимум 100 мб. Другая причина заключается в том, что после 10 минут использования есть 350 экземпляров, а затем сколько через неделю? – 2009-07-16 10:20:57

ответ

1

Скорее всего, что-то звонит GraphicsEnvironment.getAllFonts(). Вызов для этого будет выделять 1-тонный шрифт в каждом установленном шрифте. Фактическое потребление памяти будет зависеть от количества доступных шрифтов, но оно не будет расти, поскольку они выделяются только один раз. Это большая работа для синтаксического анализа, но альтернативой является использование GraphicsEnvironment.getAvailableFontFamilyNames(), так как это просто возвращает имя без создания экземпляров любых шрифтов.