Можете ли вы создать несколько JVM в JNI в одном процессе? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть среда C ++, которая выполняется в одном процессе и допускает модули, и один тип модулей, который я хотел бы добавить, - это модуль, который загружает JAR, а затем вызывает в нем определенную предопределенную функцию.Одновременно может быть запущено столько модулей, сколько пожелает пользователь, что поднимает вопрос:

Может ли каждый модуль создать отдельную JVM с JNI_CreateJavaVM (), и эти JVM будут полностью независимы друг от друга (однако в том же самомпроцесс)?Или Java внутренне полагается на глобальные переменные и т. Д., Которые могут мешать друг другу?

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете создать только одну виртуальную машину в каждом процессе и получить одну JNIEnv.Создание нескольких виртуальных машин когда-то поддерживалось в некоторых очень старых реализациях JVM, но больше не поддерживается.

См. JNI_CreateJavaVM в документации Oracle Java 7 JNI :

Начиная с JDK / JRE 1.2, создание нескольких виртуальных машин в одном процессе не поддерживается.

И Документация IBM JDK 7 JNI :

Java в IBM i поддерживает создание только одной виртуальной машины Java (JVM) в рамках одного задания или процесса.

(предположительно, такое же ограничение применяется к JVM IBM AIX)

И более подробно здесь :

Вы не можете успешно вызывать JNI_CreateJavaVM () более одного раза в работе, а JNI_GetCreatedJavaVMs () не может возвращать большечем одна JVM в списке результатов.

Поддержка создания только одной JVM в одном задании или процессе соответствует стандартам эталонной реализации Oracle America, Inc. Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...