commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joe Barnett (Created) (JIRA)" <>
Subject [jira] [Created] (LANG-770) StringUtils.join(Object[]) performance issue if .toString() is not trivial
Date Tue, 15 Nov 2011 01:07:51 GMT
StringUtils.join(Object[]) performance issue if .toString() is not trivial

                 Key: LANG-770
             Project: Commons Lang
          Issue Type: Bug
            Reporter: Joe Barnett

I have some code that builds syntax trees, and then uses a combination of TreeNode.toString()
and StringUtils.join() to recursively convert that syntax tree to a String representation.

example .toString() of a SumNode class, where children is a TreeNode[]:

public String toString() {
    return StringUtils.join(children, "+");

The problem is, StringUtils.join(Object[], String, int, int) is trying to be too smart about
preallocating the StringBuffer size it uses internally, as it does:

bufSize *= ((array[startIndex] == null ? 16 : array[startIndex].toString().length())
                        + separator.length());

followed by implicitly calling .toString() on each object in the array:


For deep syntax trees, this results in incredibly bad performance, as when traversing the
syntax tree, every time we go to the first node, we re-expand the entire tree below that node
(which does the same thing with the first node below that, etc).

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:!default.jspa
For more information on JIRA, see:


View raw message