Влияние на производительность, если я напишу assert (! MyClass.desiredAssertionsStatus || ...)? - PullRequest
0 голосов
/ 27 августа 2018

Мне нравится использовать операторы assert до тех пор, пока я могу их правильно деактивировать.

Я слышал, что, если перенос в утверждении if выполняется, компилятор в основном удаляет их, поэтому они не оказывают влияния.

if (MyClass.class.desiredAssertionStatus(){assert(xyz==true)}

Однако Intellij всегда предлагает «упростить» мои утверждения следующим образом:

assert(!MyClass.class.desiredAssertionStatus() || xyz==true);

Я хотел бы знать, может ли рекомендация Intellij действительно влиять на производительность, т.е.компилятор больше не распознает их удаление?

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Ваше утверждение

if (MyClass.class.desiredAssertionStatus(){assert(xyz==true)}

выглядит довольно запутанным, и в рекомендации intellij не хватает того, что вы, скорее всего, должны написать просто

assert xyz;

Обратите внимание, что это эквивалентно

if (CurrentClass.class.desiredAssertionStatus()) {
    if (!xyz) throw new AssertionError(...);
}

(, если вы не измените статус подтверждения динамически , как заметил Хольгер), поэтому вы проверяли статус подтверждения дважды.Это полностью избыточно, когда MyClass является текущим классом и, возможно, бессмысленно в противном случае.

0 голосов
/ 27 августа 2018

Активы включены и отключены на уровне JVM с помощью флагов запуска. При отключении они в основном пропускаются JVM и не влияют на производительность.

Поэтому вам не нужны операторы if.

...