3

我发现每当我在带有 HTML 的 JLabel 上设置文本时,都会分配一个 8KB 的缓冲区,即使我的标签文本可能很短。深入研究一下,罪魁祸首似乎在于 DefaultStyledDocument:

public static final int BUFFER_SIZE_DEFAULT = 4096;

看起来每次更改文本时,都会触发一个属性更改侦听器,并分配一个新的 HTMLDocument,其中 GapContent 具有该默认缓冲区大小。UTF-16 中的 4k 个字符为我提供了 8K 的内存,用于一个很小的标签。

据我所知,在分配文档之前,我无法更改该值。我认为反射可能会派上用场,每使用 Java 反射更改私有静态最终字段,但根据第二个答案,我似乎不走运。事后我考虑过调整间隙缓冲区的大小,但这似乎很棘手。

有人遇到过这个吗?我希望我必须变得非常老练才能有机会......

谢谢!

4

1 回答 1

1

我还没有遇到过这个问题,但是您可以使用具有指定初始长度的GapContent来使用此构造函数吗?默认构造函数使用默认缓冲区大小。

public DefaultStyledDocument()
{
    this(new GapContent(BUFFER_SIZE_DEFAULT), new StyleContext());
}

所以只需使用new HTMLDocument(new GapContent(/*whatever works for you*/), new StyleContext())

于 2012-06-28T07:04:07.473 回答