Adrian Crum wrote:
> That's it. If you want to know how this will benefit memory use, read on...
> 
> Consider this mini-language statement:
> 
> <set field="isTrue" value="Y"/>
> 
> The value attribute is kept in memory as a FlexibleStringExpander
> instance. That instance will contain one instance of ConstElem that
> contains the String "Y". So, let's tally up the memory used for this
> single character:
> 
> FlexibleStringExpander fields:
> 
>   String orig = "Y"
>   List strElems = a List with one ConstElem element
>   int hint = 20 (used as a StringBuilder initial size)

ArrayList has the internal array, which has a default size of 20, you
are correct.  However, that's not the only field.  There is an 'int
size' and 'int modCount'.

> ConstElem fields:
> 
>   String str = "Y"
> 
> That's a lot of overhead to store a single character. After the proposed
> refactor, the value attribute will be kept in memory as a ConstElem
> instance - which will contain nothing more than the String "Y".
> 
> The ConstElem class really doesn't need the String class methods, so we
> can eliminate the String instance too - by storing it as a character
> array. Now the "Y" StringExpression instance takes up the same space as
> a String object.

The embed String meanwhile has an 'int hash', 'int count', 'int
offset' field, in addition to the 'char[] value' array.

Reply via email to