The following is an extract from MSDN:
The common language runtime conserves
string storage by maintaining a table,
called the intern pool, that contains
a single reference to each unique
literal string declared or created
programmatically in your program.
Consequently, an instance of a literal
string with a particular value only
exists once in the system.
For example, if you assign the same
literal string to several variables,
the runtime retrieves the same
reference to the literal string from
the intern pool and assigns it to each
variable.
The Intern method uses the intern pool
to search for a string equal to the
value of str. If such a string exists,
its reference in the intern pool is
returned. If the string does not
exist, a reference to str is added to
the intern pool, then that reference
is returned. .... If you are trying to
reduce the total amount of memory your
application allocates, keep in mind
that interning a string has two
unwanted side effects. First, the
memory allocated for interned String
objects is not likely be released
until the common language runtime
(CLR) terminates.
So, does this mean that CLR keeps one single intern pool for all running .net apps?
Example: if a program A creates a string literal "Test" and if another program tries to create another string literal "Test", the same copy is used? The same question also applies to JVM.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…