Так как String
в Java (как и другие языки) потребляет много памяти, потому что каждый символ потребляет два байта, Java 8 представила новую функцию с названием Дедупликация строк, которая использует тот факт, что массивы char являются внутренними для строк и final, поэтому JVM может обходиться с ними.
Я читал этот пример до сих пор, но поскольку я не являюсь профессиональным Java-кодером, мне трудно понять концепцию.
Вот что он говорит,
Были рассмотрены различные стратегии для Stup Duplication, но реализуемый в настоящее время следует следующему подходу: всякий раз, когда сборщик мусора посещает объекты String, он принимает к сведению charмассивы. Он берет свое значение хэш-функции и сохраняет его вместе со слабым ссылка на массив. Как только он найдет другую строку, которая тот же хэш-код сравнивает их char с char. Если они соответствуют ну, одна строка будет изменена и укажет на массив charвторая строка. Первый массив char больше не ссылается больше и может быть собрано мусор.
Весь этот процесс, конечно, приносит некоторые накладные расходы, но контролируется по жестким ограничениям. Например, если строка не найдена дубликатов на некоторое время, когда он больше не будет проверен.
Мой первый вопрос,
По-прежнему нехватка ресурсов по этой теме, так как она недавно добавлена в Java 8 update 20, может ли кто-нибудь здесь поделиться некоторыми практическими примерами того, как это помогает уменьшить память, потребляемую String
в Java?
Edit:
В приведенной выше ссылке говорится,
Как только он найдет другую строку, которая имеет тот же хэш-код, она сравнивает их char с помощью char
Мой второй вопрос,
Если хэш-код из двух String
одинаковый, то Strings
уже совпадают, то зачем сравнивать их char
на char
после того, как будет найдено, что два String
имеют одинаковый хеш-код?