Like I guessed, they're using a byte array instead of a char array for Strings wherever they can.
Presumably this makes the code path more complicated, because every time the JVM deals with a String it now needs to check what kind it is. The space savings are probably worth it, at least in some applications.
Why isn't it on by default? Two possibilities:
- The penalty is too high in many applications. In my opinion, this would make it a bit of a benchmark special.
- The option isn't quite ready for prime time yet, but they plan to turn it on by default later.
(Of course that assumes that there's no penalty for using non-ASCII Strings beyond the extra space. If the option is implemented in an all-or-nothing fashion, e.g. if it stops using byte arrays the first time it encounters a non-ASCII String, then non-ASCII applications wouldn't benefit at all.)