В чём разница между intrinsic и native методами в Java?
Объясните, пожалуйста, в чём разница между intrinsic и native методами Java?
Объясните, пожалуйста, в чём разница между intrinsic и native методами Java?
intrinsic - это известные компилятору низкоуровневые функции, которые он позволяет эффективно выполнять и агрессивно оптимизировать вызывающий код. Обычно это конкретные операции, для которых (JIT) компилятор может сразу вставлять соотв. инструкции, не тратя времени на обычные вызовы.
native - это функции с С интерфейсом, реализованные в сторонних библиотеках (обычно на низкоуровневых языках типа С/С++ или ассемблере), с которыми java рантайм может взаимодействовать посредством JNI. Их вызов очень накладный, что должно компенсироваться эффективной реализацией.
Реализация native
методов не известна для Java, это полностью «черный ящик» это создает дополнительные расходы памяти-времени при вызове такой функции и главное не позволяет оптимизировать код так, как это возможно для intrinsic
(где реализация известна и Java код может быть заменен оптимизированными инструкциями в зависимости от многих факторов - платформы, процессора и прочего)