Подтвердить что ты не робот

Почему DUP при создании нового экземпляра

В настоящее время я просто в проекте, который использует java-байт-код. Обычно я вижу, что при создании нового экземпляра класса и вызове метода на нем байт-код будет выглядеть так:

NEW <MyClass>
DUP
INVOKESPECIAL <MyClass.<init>>

Вот почему нужно делать "DUP"? Из VM Spec я получаю описание "Дублировать верхнее значение в стеке операндов и нажимать дублируемое значение на стек операнда". Но зачем здесь дублировать верхнее значение стека операндов? Спасибо.

4b9b3361

Ответ 1

Поскольку INVOKESPECIAL будет потреблять значение, созданное NEW из стека операндов, но вам может понадобиться фактически использовать это значение, поэтому ссылка дублируется заранее.