Пул строковых литералов Java и строковый объект

Я знал, что JVM поддерживает пул строковых литералов для повышения производительности и поддержки памяти JVM, и узнал, что строковый литерал поддерживается в пуле строк. Но я хочу прояснить кое-что, связанное с пулом строк и строковым объектом, созданным в куче.

Пожалуйста, поправьте меня, если мое объяснение неверно.

String s = "abc";

Если указанная выше строка выполняется, строковый литерал «abc» добавляется в пул строк, если он не существует в пуле. В куче создается строковый объект, и ссылка s будет указывать на литерал в пуле.

Вопросы:

  1. Создает ли этот код строковый объект в куче каждый раз, когда он выполняется?
  2. Пул строковых литералов поддерживает только строковые литералы или также поддерживает строковый объект?
  3. Когда JVM решает, что ей нужно добавить строковый литерал в пул строк? решает ли он во время компиляции или во время выполнения?

Я не уверен, где именно создается строковый объект, если он указывает на строковый литерал в пуле.

Спасибо.

11
задан Sahil Muthoo 8 November 2011 в 04:47
поделиться