This article will provide you a short overview of a string deduplication feature added into Java 8 update 20.
String objects consume a large amount of memory in an average application. Some of these strings may be duplicated – there exist several distinct instances of the same String (
a != b, but a.equals(b)). In practice, a lot of
Strings could be duplicated due to various reasons.
Originally, JDK offered
String.intern() method to deal with the string duplication. The disadvantage of this method is that you have to find which strings should be interned. This generally requires a heap analysis tool with a duplicate string lookup ability, like YourKit profiler. Nevertheless, if used properly, string interning is a powerful memory saving tool – it allows you to reuse the whole
String objects (each of whose is adding 24 bytes overhead to the underlying
Starting from Java 7 update 6, each
String object has its own private underlying
char. This allows JVM to make an automatic optimization – if an underlying
char is never exposed to the client, then JVM can find 2 strings with the same contents, and replace the underlying
char of one string with an underlying
char of another string.
That’s done by the string deduplication feature added into Java 8 update 20. How it works: