Нарушение производительности String.intern ()

Многие люди говорят о преимуществах производительности String.intern (), но на самом деле меня больше интересует, какое может быть снижение производительности.

Мои основные проблемы:

Search cost: The time that intern() takes to figure out if the internable string exists in the constants pool. How does that cost scale with the number of strings in that pool? Synchronization: obviously the constant pool is shared by the whole JVM. How does that pool behave when intern() is being called over and over from multiple threads? How much locking does it perform? How does the performance scale with contention?

Я обеспокоен всеми этими вещами, потому что в настоящее время я работаю над финансовым приложением, которое имеет проблему использования слишком большого количества памяти из-за дублированных строк. Некоторые строки в основном выглядят как перечисляемые значения и могут иметь только ограниченное число потенциальных значений (таких как названия валют («USD», «EUR»)), которые существуют в более чем миллионе копий. В этом случае String.intern () кажется легким делом, но я беспокоюсь о накладных расходах синхронизации вызова intern () каждый раз, когда я где-то сохраняю валюту.

Кроме того, некоторые другие типы строк могут иметь миллионы различных значений, но по-прежнему иметь десятки тысяч копий каждого (например, коды ISIN). В связи с этим я обеспокоен тем, что интернирование миллиона строк в основном приведет к замедлению метода intern () настолько, что это приведет к зависанию моего приложения.

Ответы на вопрос(4)

Ваш ответ на вопрос