我发现每当我在带有 HTML 的 JLabel 上设置文本时,都会分配一个 8KB 的缓冲区,即使我的标签文本可能很短。深入研究一下,罪魁祸首似乎在于 DefaultStyledDocument:
public static final int BUFFER_SIZE_DEFAULT = 4096;
看起来每次更改文本时,都会触发一个属性更改侦听器,并分配一个新的 HTMLDocument,其中 GapContent 具有该默认缓冲区大小。UTF-16 中的 4k 个字符为我提供了 8K 的内存,用于一个很小的标签。
据我所知,在分配文档之前,我无法更改该值。我认为反射可能会派上用场,每使用 Java 反射更改私有静态最终字段,但根据第二个答案,我似乎不走运。事后我考虑过调整间隙缓冲区的大小,但这似乎很棘手。
有人遇到过这个吗?我希望我必须变得非常老练才能有机会......
谢谢!