Я читаю статью здесь: http://www.kdgregory.com/?page=java.byteBufferНедостаток вызова JNI?
На этой странице, есть в этом разделе:
На самом деле, единственная причина, по которой я могу видеть, для использования прямых буферов в чистом Java программы является то, что они не будут перемещаться во время сбора мусора. Если вы прочитали мою статью о ссылочных объектах, вы помните, что сборщик мусора сжимает кучу после утилизации мертвых объектов. Если у вас есть большие блоки памяти кучи, выделенные в виде буферов, они могут перемещаться как часть уплотнения и независимо от того, насколько быстро ваш процессор занимает время; это не то, что вы хотите делать в каждой полной коллекции. Поскольку прямой буфер живет вне кучи, на него не влияют коллекции. С другой стороны, каждый доступ к данным является вызовом JNI. Только бенчмаркинг скажет вам, помогает ли это или вредит вашему конкретному приложению.
Утверждение JNI подразумевает наличие недостатка в использовании JNI, но я не уверен, что это такое. Может ли кто-нибудь помочь? Я нашел этот вопрос при переполнении стека: Disadvantages of using Java Native Interface
Однако я не поверил из контекста утверждения в этом параграфе, автор подразумевал, что недостатком было то, что JNI было трудно отлаживать или что оно могло бы JVM. Благодаря!
Этот вид кажется попрошайничеством вопрос. Учитывая, насколько смехотворно низкий уровень JNI, я бы сомневался, что накладные расходы настолько значительны. То есть вы не сортируете сложные типы или что-то еще. – millimoose
Это говорит: [Что заставляет JNI звонить медленнее?] (Http://stackoverflow.com/questions/7699020/what-makes-jni-calls-slow) – millimoose
К. Д. Грегори не понимает, для чего нужны прямые буферы. Они предназначены для использования при копировании между каналами, когда вам вообще не нужны данные в коде Java. Они * сохраняют операции в стиле JNI, не перемещая данные между стороной JNI и стороной JVM. Если вы манипулируете данными на Java, они, конечно, бессмысленны и дороги. – EJP