In our continuing effort to improve performance, we're currently making a pass to reduce the footprint of collections, as possible. Our ParseNode implementation mirrors ArrayList in how it grows its underlying children array. We should add a trimToSize method so those arrays can be paired down to the minimum size. Probably a ParseRootNode should implement a method to visit all descendants (using a queue) and invoke their trimToSize methods. It seems like our parsers should do that once parsing is complete.