Пишу небольшую jvm (не очень строго соблюдая спецификацию) и компилятор под это дело. Столкнулся с таким вот вопросом. По спецификации в пуле констант class файла, имеет место быть константа типа Utf8, служащая как я понял для представления строк. Мне не совсем понятно, для чего она нужна, так как у меня имеется следующая цепочка рассуждений.
В jvm нет строк, их можно представить только как int[]. Для того что бы конечный пользователь не возился с массивами, был сделан класс String, который на вход принимает как раз этот int[] (на уровне java это char[]). А выражение вида:
String str = "abc";
Разворачивается компилятором таким образом:
char[3] t;
t[0] = 'a';
t[1] = 'b';
t[2] = 'c';
String str = new String(t);
Те строка так же оказывается пуле констант, но уже как константы типа int (так как char c utf символом разворачивается в short, а все short на уровне вм это int, а любой int > 127 попадает в пул констант (до 127 заносится в стек напрямую через инструкцию bipush)).
Вопрос - зачем нужны константы utf8 (вероятно я неправильно понимаю механику работы строк?)?
P. S. При этом если использовать занесение строк в пул констант как я написал, то получается просто сумасшедшая экономя места, так как для строки например из 1000 кириллических символов, придется выделить 2кб памяти в пуле констант, а для хранения их как int, всего 2 * 4 * кол-во одинаковых символов в строке. Т. е. если например используются только буквы русского алфавита, вся строка займет в пуле всего 66 байт.
Ну я как обычно задал вопрос а потом сам разобрался. Строковые константы utf8 необходимы для хранения различной мета-информации, необходимой jvm для функционирования. В пример можно привести работу инструкции new, которая в качестве аргумента, получает адрес в пуле констант, на котором хранится строковая константа с сигнатурой класса. Например для :
new String();
компилятор сгенерирует инструкцию new, аргумент которой будет ссылаться на ячейку пула констант типа utf8 с содержимым - java/lang/String.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый вечер! Нужно сделать то, что на картинкеТень текста самим текстом
Мне нужно реализовать такой функционал, есть ли готовые решения/плагины? :
Блок обведённый в красную рамку фиксированный position: fixed;, необходимо его каким-нибудь образом выровнять вертикально по центруВысота самого...