字体库 sun.font.TrueTypeFont 会造成内存泄漏吗?

3
我一直在使用堆转储对Java软件进行分析,发现有350个sun.font.TrueTypeFont的实例。在我所采取的其他堆转储中,实例数量更多。应用程序代码仅创建了5个字体实例,总共有24个实例,其中大部分是由WDesktopProperties和其他Java库类创建的。
这种TrueTypeFont实例数量对于一个相当大的桌面应用程序来说是否很典型?如果是这样,为什么?FontManager占用了近200kb的RAM!
谢谢,
安迪

2
200kb的RAM?谁在乎呢? - Tom Hawtin - tackline
1
所有的软件工程师都应该关注内存消耗。"谁在乎呢?"的态度是Java应用程序通常需要至少100MB内存的原因之一。另一个原因是如果在10分钟使用后有350个实例,那么一周后会有多少个实例? - Andy
1个回答

1
很可能是有些东西在调用GraphicsEnvironment.getAllFonts()。对它的调用将会在每个已安装的字体中分配一个1点字体。实际的内存消耗取决于可用字体的数量,但它们只会被分配一次,因此不会增长。解析起来更费力,但另一种选择是使用GraphicsEnvironment.getAvailableFontFamilyNames(),因为它只返回名称而不实例化任何字体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接