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