Poniżej znajduje się wyciąg z MSDN:Czy CLR/JVM przechowuje pojedynczą pulę intern dla wszystkich działających aplikacji .net/java?
plików wykonywalnych języka wspólnego konserwuje przechowywanie ciąg utrzymując stolik, nazywa stażysta basen, który zawiera jednego odniesienia do każdego unikalnego dosłownym ciąg deklarowanej lub utworzonego programowo w twoim programie. W związku z tym wystąpienie literalnego ciągu o określonej wartości tylko istnieje w systemie.
Na przykład, jeśli przydzielić tego samego dosłownego ciąg kilku zmiennych, runtime pobiera taką samą odniesienie do dosłownego łańcucha z stażysta basenie i przypisuje go do każdej zmiennej .
Metoda Intern wykorzystuje pulę intern do wyszukiwania ciągu równego wartości wartości str. Jeśli taki ciąg istnieje, zwracane jest jego odniesienie w puli internującej: . Jeśli ciąg znaków nie istnieje , odniesienie do str jest dodawane do puli intern, to zwracane jest odwołanie . .... Jeśli próbujesz uzyskać zmniejszyć całkowitą ilość pamięci, którą przydziela twoja aplikacja , pamiętaj o , że interakcja z ciągiem ma dwa niepożądane efekty uboczne: . Po pierwsze, pamięć przydzielona do internowanych obiektów String prawdopodobnie nie zostanie zwolniona , dopóki nie zakończy się wspólne środowisko wykonawcze języka (CLR).
Czy to oznacza, że CLR utrzymuje jedną pulę intern dla wszystkich działających aplikacji .net? Przykład: jeśli program A tworzy literał łańcuchowy "Test" i jeśli inny program próbuje utworzyć inny ciąg literowy "Test", ta sama kopia jest używana? To samo pytanie dotyczy również JVM.
Czy masz link? –