String interning speeds up string comparisons, which are sometimes a performance bottleneck in applications (such as
compilers and
dynamic programming language runtimes) that rely heavily on
associative arrays with string keys to look up the attributes and methods of an object. Without interning, comparing two distinct strings may involve examining every character of both. This is slow for several reasons: it is inherently
O(n) in the length of the strings; it typically requires reads from several regions of
memory, which take time; and the reads fill up the processor cache, meaning there is less cache available for other needs. With interned strings, a simple
object identity test suffices after the original intern operation; this is typically implemented as a pointer equality test, normally just a single machine instruction with no memory reference at all. String interning also reduces memory usage if there are many instances of the same string value; for instance, it is read from a
network or from
storage. Such strings may include
magic numbers or
network protocol information. For example, XML parsers may intern names of tags and attributes to save memory. Network transfer of objects over Java RMI serialization object streams can transfer strings that are interned more efficiently, as the String object's handle is used in place of duplicate objects upon serialization. ==Issues==