Поскольку интернирование строк по умолчанию в Java получило много негативных отзывов в прессе, я ищу альтернативу.
Можете ли вы предложить API, который является хорошей альтернативой интернированию строк Java? В моем приложении используется Java 6. Мое требование в основном состоит в том, чтобы избежать дублирования строк с помощью интернирования.
По поводу плохой прессы:
- Строковый стажер реализован с помощью нативного метода. И реализация C использует фиксированный размер некоторых записей 1k и очень плохо масштабируется для большого количества строк.
- Java 6 хранит интернированные строки в Perm gen. И, следовательно, не GC'd и, возможно, привести к ошибкам perm gen. Я знаю, что это исправлено в java 7, но я не могу перейти на java 7.
Зачем мне нужно использовать intering?
- Мое приложение представляет собой серверное приложение с размером кучи 10-20G для разных развертываний.
- Во время профилирования мы выяснили, что сотни тысяч строк являются дубликатами, и мы можем значительно улучшить использование памяти, избегая хранения повторяющихся строк.
- Память была для нас узким местом, и поэтому мы ориентируемся на нее, а не на преждевременную оптимизацию.