Я знал, что JVM поддерживает пул строковых литералов, чтобы повысить производительность и поддерживать JVM-память, и узнал, что строковый литерал поддерживается в пуле строк. Но я хочу прояснить что-то, связанное с пулом строк и строковым объектом, созданным в куче.
Пожалуйста, исправьте меня, если мое объяснение неверно.
String s = "abc";
Если приведенная выше строка выполнена, строковый литерал "abc" добавляется в пул строк, если он не существует в пуле. И строковый объект создается в куче, а ссылка s
указывает на литерал в пуле.
Вопросы:
- Этот код создает строковый объект в куче каждый раз, когда он выполняется?
- Поддерживает ли пул строковых литералов только строковые литералы или поддерживает строковый объект?
- Когда JVM решает, что ему нужно добавить строковый литерал в пул строк? он принимает решение во время компиляции или времени выполнения?
Я не уверен, где именно создается строковый объект, если он указывает на строковый литерал в пуле.
Спасибо.