Оптимизирует ли движок V8 склеивание строковых констант аналогично Java?

Вопрос об оптимизации строк в JavaScript

Изучаю особенности работы со строками в JS и хочу понять, как движок обрабатывает константы.

В Java компилятор умеет объединять строковые литералы на этапе компиляции:

final String FIRST = "hello";
final String SECOND = "world";
final String RESULT = FIRST + SECOND;

В этом случае новая строка НЕ создается во время выполнения программы.

Может ли JavaScript делать похожую оптимизацию? Например:

const greeting = "hello";
const target = "world";
const message = greeting + target;

Поскольку обе переменные являются константами, я думал, что JS может избежать создания нового объекта в памяти, как это делает Java с final переменными.

Выполняет ли V8 такую оптимизацию или всегда создает новую строку в памяти при конкатенации?

V8 довольно умный с оптимизацией строк, но работает не как в Java. Движок использует rope strings - когда склеиваешь строки, он создает структуру со ссылками на исходные части вместо копирования всего в память. Реальное склеивание происходит только при обращении к конкретным символам. Еще есть интернирование - одинаковые литералы хранятся в одном месте. Так что оптимизация есть, но механизм другой, не compile-time склеивание как в Java.

Интересная тема! V8 склеивает литералы типа “hello” + “world” прямо на этапе компиляции, но с const переменными всё сложнее — там оптимизация работает уже во время выполнения. Ты смотрел через dev tools, что реально происходит в памяти при таких операциях?