Мне было интересно, почему Math.sin(double)
делегировать на StrictMath.sin(double)
, когда я нашел проблему в Reddit thread. Вышеупомянутый фрагмент кода выглядит следующим образом (JDK 7u25):
Math.java:
public static double sin(double a) {
return StrictMath.sin(a); // default impl. delegates to StrictMath
}
StrictMath.java:
public static native double sin(double a);
Вторая декларация native
, которая для меня разумна. В документе Math
говорится, что:
Генераторам кода рекомендуется использовать собственные библиотеки на основе платформы или инструкции микропроцессора, где доступно (...)
И вопрос: не является ли родной библиотекой, которая достаточно подходит для платформы StrictMath
? Что еще может знать JIT о платформе, чем установленная JRE (пожалуйста, сосредоточьтесь только на этом случае)? В словах, почему не Math.sin()
native уже?