我发现每当我使用HTML在JLabel上设置文本时,即使我的标签文本可能非常短,也会分配8KB缓冲区。挖掘一下,看起来罪魁祸首在于DefaultStyledDocument:
public static final int BUFFER_SIZE_DEFAULT = 4096;
看起来每次更改文本时,都会触发属性更改侦听器,并分配一个新的HTMLDocument,其GapContent为该默认缓冲区大小。 UTF-16中的4k字符为一小块标签提供了8K的内存。
据我所知,在分配文档之前,我无法更改该值的更改。根据{{3}},我认为反思可能会派上用场,但根据第二个答案看起来我运气不好。事实上,我已经考虑过调整间隙缓冲区的大小,但这似乎很棘手。
之前有人遇到过这个吗?我希望即使有机会,我也必须非常愚蠢......
谢谢!
答案 0 :(得分:1)
我没有碰到这个,但您可以使用this constructor使用指定初始长度的GapContent吗?默认构造函数使用默认缓冲区大小。
public DefaultStyledDocument()
{
this(new GapContent(BUFFER_SIZE_DEFAULT), new StyleContext());
}
所以只需使用new HTMLDocument(new GapContent(/*whatever works for you*/), new StyleContext())