使用Tomcat是否修复了BodyContentImpl jsp标记内存泄漏?

时间:2012-05-02 21:20:14

标签: tomcat memory-leaks jsp-tags

我已经在apache上阅读了一些关于BodyContentImpl效率低下以及如何分配cb空间的错误报告。 (private char[] cb;)如果标签写出50KB的HTML,缓冲区大小将从512字节增加到50KB,每次需要分配时,它将创建一个新的char []并执行两个 System.arraycopy来电。

https://issues.apache.org/bugzilla/show_bug.cgi?id=43925

此错误报告称该错误已移至Tomcat 7的队列中,但我在发布说明中看不到任何内容。有没有人能够在此期间使用Tomcat解决此问题?

我读过LIMIT_BUFFER = true。他们说设置此标志时会有性能损失。代码将释放当前的sb并以512字节重新分配一个新的。

public void clear() throws IOException {
467           if (writer != null) {
468               throw new IOException();
469           } else {
470               nextChar = 0;
471               if (LIMIT_BUFFER && (cb.length > Constants.DEFAULT_TAG_BUFFER_SIZE)) {
472                   bufferSize = Constants.DEFAULT_TAG_BUFFER_SIZE;
473                   cb = new char[bufferSize];
474               }
475           }
476       }

如果在同一个请求中多次调用此代码,这似乎会迫使您重新开始使用一个小缓冲区,并最终创建更多cb来收集垃圾。

错误报告中有建议的更改,但我想知道是否有人已经实现了修复此问题的内容,因此它不会生成如此多的浪费字符串并执行如此多的System.arraycopy调用。谢谢!

1 个答案:

答案 0 :(得分:0)

不,此增强请求没有进一步的移动。

我选择LIMIT_BUFFER = true。对于您认为可能存在性能问题的任何内容,请通过分析器运行您的应用程序,以查看是否真的有任何需要担心的问题。有很多选择。我使用YourKit,因为他们向开源开发人员提供免费副本。