Abstract
In several Java VMs, strings consist of two separate objects: metadata like the string length are stored in the
actual string object, while the string characters are stored in a character array. This separation causes an unnecessary overhead. Each string method must access
both objects, which leads to a bad cache behavior and reduces the execution speed.
We propose to merge the character array with the string's metadata object at run time. This results in a new layout of strings with better cache performance,
fewer field accesses, and less memory overhead. We implemented this optimization for Sun Microsystems' Java HotSpot VM, so that the optimization is performed
automatically at run time and requires no actions on the part of the programmer. The original class String is transformed into the optimized version and the
bytecodes of all methods that allocate string objects are rewritten. All these transformations are performed by the Java HotSpot VM when a class is loaded.
Therefore, the time overhead of the transformations is negligible.
Benchmarks show a reduction of the average used memory after a full garbage collection and an improved performance. The performance of the SPECjbb2005 benchmark
increases by 8%, and the average used memory after a full garbage collection is reduced by 19%. The peak performance of SPECjvm98 is improved by 8% on average,
with a maximum speedup of 62%.
Original language | English |
---|---|
Publication status | Published - Jun 2008 |
Fields of science
- 102 Computer Sciences
- 102009 Computer simulation
- 102011 Formal languages
- 102013 Human-computer interaction
- 102029 Practical computer science
- 102022 Software development
- 102024 Usability research