Стало интересно как работают некоторые ф-ии. При нажатии 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
сигнализирует о том, что метод реализован в платформо-зависимом коде, часто на языке С. Чего тоже не уловил, тип я его просмотреть не могу или что?
Поясните пожалуйста
Нативные Java методы в пакете java.math
реализованы через библиотеку FDLIBM (Freely Distributable LIBM) - по крайней мере если платформа поддерживает спецификацию IEEE 754 floating-point arithmetic
Если платформа (ОС) не поддерживает IEEE754 (например ARM) - соответственно для него реализация будет другая
Конкретно исходники sqrt()
для FDLIBM здесь
@HotSpotIntrinsicCandidate
- означает, что аннотированный метод может быть, встроен в HotSpot JVM. Для смертного девелопера - это ничего не означает, это важно если вы разработчик Hotspot JVM или пишете библиотеки для него.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Первый вопросКакая связь существует между уровнем изоляции транзакций, параметрами JPA Lock