Многопоточность на JAVA - PullRequest
0 голосов
/ 12 сентября 2018

Я получаю сбой памяти в многопоточной среде JVM.В каждой среде выполнения потока я загружаю экземпляр разделяемой библиотеки C ++.(Скажите exm1.so, exm2.so и т. Д.).

Позвольте мне сначала сказать, что разделяемая библиотека C ++ не является поточно-ориентированной.Таким образом, мы загружаем каждый поток, созданный JVM, с экземпляром разделяемой библиотеки C ++.Код Java:

import com.sun.jna.Native;

Thread 1:

run{
  x libraryInstance = Native.loadLibrary(exm1.so, x.class);
  x. mymethod();
}

Thread 2:

run{
  x libraryInstance = Native.loadLibrary(exm2.so, x.class);
  x. mymethod();
}

Мой вопрос заключается в том, в какой памяти будет храниться этот файл .so и управляет ли JVM памятью каждого потока потокобезопасным способом?

В каждом файле .so естьС ++ вызовы функций malloc.JVM эффективно управляет этой памятью.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Чтобы я получил правильный ответ.dlopen в Linux через JAVA не по умолчанию с RTLD_LOCAL.Я прошел явно то же самое.это сработало.

0 голосов
/ 12 сентября 2018

Нет, как правило, вам нужно самостоятельно управлять безопасной многопоточностью с помощью конструкции synchronized, чтобы защитить доступ к общим ресурсам.

...