我已经使用堆转储分析了一些Java软件,其中有350个sun.font.truetypefont实例,在其他堆转储中,我得到了更多。应用程序代码创建的字体实例只有5个,总共有24个,大部分是由wdesktopproperties和其他java库类创建的。
对于一个相当大的桌面应用程序,这种TrueTypeFont实例的数量是典型的吗?如果是,那为什么?FontManager占用了将近200KB的内存!
谢谢,
安迪

最佳答案

很可能,有东西在叫GraphicsEnvironment.getAllFonts()。对它的调用将在每个安装的字体中分配1点字体。实际内存消耗将取决于可用字体的数量,但不会增加,因为它们只分配了一次。解析要做的工作更多,但另一种方法是使用GraphicsEnvironment.getAvailableFontFamilyNames(),因为它只返回名称而不实例化任何字体。

07-24 20:57