В чем смысл заметок здесь?

#java #performance #exception #jvm

#java #Производительность #исключение #jvm

Вопрос:

Я изучаю исходный код AbstractQueuedSynchronizer JDK8, и я не знаю цели «нулевой проверки» здесь:

 /**
 * Returns previous node, or throws NullPointerException if null.
 * Use when predecessor cannot be null.  The null check could
 * be elided, but is present to help the VM.
 *
 * @return the predecessor of this node
 */
final Node predecessor() throws NullPointerException {
    Node p = prev;
    if (p == null)
        throw new NullPointerException();
    else
        return p;
}
 

В примечаниях говорится, что проверка null может быть отменена, но присутствует, чтобы помочь виртуальной машине — почему? В чем выгода для виртуальной машины?

Комментарии:

1. Понятия не имею, но предполагаю: возможно, это помогает компилятору just in time работать лучше. Но почему именно это может (если вообще может) сказать человек, который действительно знает внутренности jvm…

2. Я отредактировал ваш вопрос и добавил несколько тегов. Надеюсь, кто-то, кто знает подробности, увидит это.

3. Код и комментарий были написаны давно; вероятно, это не актуально для текущей JVM. Я полагаю, идея заключалась в том, чтобы вручную установить проверку null, чтобы JVM могла обрабатывать все последующие использования переменной как всегда ненулевые и устранять неявные проверки null при доступе к полям узла.

Ответ №1:

С точки зрения дизайна, когда вы пишете API, полезно передать ответственность за обработку неопределенного поведения пользователю, а не пытаться справиться с этим самостоятельно.

В комментариях говорится, что вы должны использовать только predecessor() тогда, когда этого не может быть null , поэтому он проверяет, чтобы убедиться, что это не так null , но если это так, то поведение не определено, и вы должны уведомить пользователя.

Возможно, есть что-то специфичное для JVM, для чего это полезно, но кто-то, кто лучше разбирается в этом, должен будет поговорить с этим.

Комментарии:

1. большое спасибо. Но я до сих пор не знаю преимущества для виртуальной машины.