Два сомнения из документации «Обзор дизайна JNI»:
Указатель интерфейса JNI действителен только в текущем потоке. Таким образом, собственный метод не должен передавать указатель интерфейса из одного потока в другой. Виртуальная машина, реализующая JNI, может выделять и хранить локальные данные потока в области, на которую указывает указатель интерфейса JNI.
JNI env(указатель интерфейса JNI) ) — это всего лишь указатель на указатель, который делает доступными через него функции JNI.
Тогда почему каждому потоку требуется собственный JNIEnv? Я просто хочу, чтобы JNIEnv имел доступ к функциям JNI, которые, как я полагаю, останутся одинаковыми для каждого потока. почему я должен получать JNIEnv для каждого потока конкретно?
еще один расплывчатый вопрос: что здесь означают эти строки:
ВМ может поддерживать две таблицы функций JNI:
одна выполняет тщательную проверку недопустимых аргументов и подходит для
отладки;
другой выполняет минимальный объем проверок, требуемый JNI
спецификация и, следовательно, более эффективна.
Означает ли это, что виртуальная машина Java может предоставлять две версии JNIEnv (указывающие на две разные таблицы функций) для потребитель, один из которых выполняет тщательную проверку аргументов, или это означает, что он внутренне использует две таблицы функций, я думаю, это означает последнее, но как потребитель может воспользоваться любыми преимуществами функции тщательной проверки недопустимых аргументов.
< п>Ссылка: https://docs.oracle.com/javase/7/docs/t ... ml#wp16696
Подробнее здесь: https://stackoverflow.com/questions/792 ... d-specific
Почему JNI env (указатель интерфейса JNI) зависит от потока? ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение