Как работает sqrt в java и не только?

112
27 октября 2021, 02:10

Стало интересно как работают некоторые ф-ии. При нажатии ctrl + клик по Math.sqrt(a) перебросила в класс Math, там ф-ия выглядит так

 @HotSpotIntrinsicCandidate
public static double sqrt(double a) {
    return StrictMath.sqrt(a); // default impl. delegates to StrictMath
                               // Note that hardware sqrt instructions
                               // frequently can be directly used by JITs
                               // and should be much faster than doing
                               // Math.sqrt in software.
}

Что за аннотация? Не понял коммента. Но ладно, идём дальше, crtl + StrictMath.sqrt(a)

@HotSpotIntrinsicCandidate
public static native double sqrt(double a);

И всё. Выяснил, что модификатор native сигнализирует о том, что метод реализован в платформо-зависимом коде, часто на языке С. Чего тоже не уловил, тип я его просмотреть не могу или что? Поясните пожалуйста

Answer 1

Нативные Java методы в пакете java.math реализованы через библиотеку FDLIBM (Freely Distributable LIBM) - по крайней мере если платформа поддерживает спецификацию IEEE 754 floating-point arithmetic

Если платформа (ОС) не поддерживает IEEE754 (например ARM) - соответственно для него реализация будет другая

Конкретно исходники sqrt() для FDLIBM здесь

@HotSpotIntrinsicCandidate - означает, что аннотированный метод может быть, встроен в HotSpot JVM. Для смертного девелопера - это ничего не означает, это важно если вы разработчик Hotspot JVM или пишете библиотеки для него.

READ ALSO
Java Зависает процесс

Java Зависает процесс

Разбирался в Javalang

192
Уровень изоляции транзакций и Hibernate

Уровень изоляции транзакций и Hibernate

Первый вопросКакая связь существует между уровнем изоляции транзакций, параметрами JPA Lock

116
Переписать SQL запрос в HQL

Переписать SQL запрос в HQL

Необходимо переписать запрос

80