Дает ли нулевая проверка SecurityManager большую производительность при выполнении doPrivs?

Я видел следующую схему много раз при выполнении операций, которые требуют особой привилегии (например, Class.getClassLoader())

final Class<?> clazz = MyClass.class;

if(System.getSecurityManager() == null) {
  // Do the operation normally, since Java 2 Security is not enabled
  return clazz.getClassLoader();
} 
else {
  // Use a doPriv, since Java 2 Security is enabled
  return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
    @Override
    public ClassLoader run() {
      return clazz.getClassLoader();
    }
  });
}

Я предполагаю, что преимущество здесь в том, что когда безопасность Java 2 не включена, код избегает создания анонимного внутреннего класса и избегает дополнительного вызова метода AccessController.doPrivilaged().

Итак, мой вопрос:
Является ли дополнительная нулевая проверка потенциально потенциально возможной, чтобы избежать создания анонимного PrivilagedAction объект и дополнительный вызов doPriv в стеке?

Приведенный мною пример - всего лишь 1-строчный, но есть и более сложные процедуры, которые могут следовать этому шаблону, и я беспокоюсь, что поддержание двух наборов кода подвержено ошибкам.
Было бы замечательно, если бы JVM оптимизировала это автоматически, но я не знаю достаточно о внутренних принципах работы JVM, чтобы знать, если / как сильно ударить по производительности, это всегда использовать doPriv.

0 ответов

Другие вопросы по тегам