Imagine you have a phone book, which contains people, which have a String firstName and a String lastName.
And it happens that in your phone book, 100,000 people have the same firstName = "John".
Because you get the data from a database or a file those strings are not interned so your JVM memory contains the char array {'J', 'o', 'h', 'n'} 100 thousand times, one per John string.
Each of these arrays takes, say, 20 bytes of memory so those 100k Johns take up 2 MB of memory.
With deduplication, the JVM will realise that "John" is duplicated many times and make all those John strings point to the same underlying char array, decreasing the memory usage from 2MB to 20 bytes.