Я видел много примитивных примеров, описывающих, как работает String intern(), но мне еще предстоит увидеть реальный случай использования, который выиграет от него.Реальная жизнь, практический пример использования String.intern() в Java?
Единственная ситуация, о которой я могу мечтать, - это иметь веб-службу, которая получает большое количество запросов, каждый из которых очень похож по своей природе из-за жесткой схемы. Посредством intern() в именах полей запроса в этом случае потребление памяти может быть значительно уменьшено.
Может ли кто-нибудь предоставить пример использования intern() в производственной среде с большим успехом? Может быть, это пример популярного предложения с открытым исходным кодом?
Edit: я имею в виду ручной интернатуру, а не гарантированному интернирование строковых литералов и т.д.
Это правда, но существует множество исключений из этого обобщения: - Если вероятность того, что ваши строки имеют одинаковую длину, очень минимальна, а количество строк, которые вы, возможно, будете intern(), высок , можно утверждать, что, поскольку equals() выполняет сначала проверку размера, вы необоснованно подвергаете себя исключениям OGG PermGen. –
Вы правы, но по производительности у вас есть O (n) для равных и O (1) для '=='. Я согласен, что худший случай возникает только в том случае, если обе строки имеют одинаковый размер и отличаются только на последнем символе. Обычно это довольно редкий случай. –
Ответ неверен. Первое, что делает String.equals, - это проверка равенства ссылок, прежде чем проверять семантическое равенство. Таким образом, для двух интернализированных строк == и .equals, ну, равно .... – PaulJWilliams