Вопрос

В C я могу выделить регистр для переменной, например:

register int i = 0;

Я знаю, что Java — это интерпретируемый язык, и он находится далеко от процессора.

Существует ли какой-либо механизм, позволяющий даже запросить (а если архитектура этого не позволяет, ну и что), чтобы моя переменная оставалась в регистре, а не перемещалась в кеш или основную память?

Я не думаю, что есть какой-либо способ, но раньше я был приятно удивлен.

Спасибо,

Это было полезно?

Решение

Нет, на Java невозможно запросить это.Однако есть некоторые вещи, которые вы можете сделать, чтобы предотвратить использование регистра, например, применить volatile модификатор переменной-члена.

Другие советы

register в C не регистрируется переменная.Это просто дает компилятору подсказку, что, вероятно, было бы неплохо поместить его в регистр.

В Java нет эквивалента.

Если он используется достаточно быстро и имеет смысл сделать его регистром int, то компилятор горячей точки должен сам это выяснить.

Фактически, компилятор горячей точки должен выполнять свою работу лучше, чем компилятор C/C++, поскольку у него больше информации для работы.Компиляторам C/C++ приходится гадать;HotSpot может измерять.

В Java нет эквивалента.Даже в C нет гарантии, что переменная будет сохранена в регистре, и компиляторы могут ее игнорировать.

В Java метод будет интерпретироваться до тех пор, пока JIT горячей точки эвристически не определит, что его необходимо скомпилировать.Для скомпилированного кода он использует алгоритм раскраски для назначения переменных и временных значений регистрам или записи в/из ОЗУ в случае переполнения регистра.

Я знаю, что Java - это интерпретированный язык, и это много абстракций вдали от процессора.

Вы в значительной степени ответили на свой вопрос там :-)

А если серьезно, в общем, пишите свой код настолько ясно и просто, насколько это возможно, и JVM сделает все возможное, чтобы правильно обработать ваш код.

Вы можете создать аннотацию с именем @register, но JVM обязательно ее проигнорирует.например

@register int i = 0;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top