String.intern() is designed for constant strings, it's implemented in C/C++ in the hotspot core code, and it has a fixed-size hashmap of around 20K entries and if more than this number of strings are interned, the performance degrades linearly since there are hash collisions and the code has to search down linked lists. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6988220 String.intern in Java 7 and 8 - http://java-performance.info/string-intern-in-java-6-7-8/ http://java-performance.info/string-intern-java-6-7-8-multithreaded-access/ http://java-performance.info/string-intern-java-7-8-part-3/ Suggestion of improving string decoding - https://cl4es.github.io/2021/02/23/Faster-Charset-Decoding.html