我在JVM多线程环境中遇到内存崩溃。在每个线程运行环境中,我都在加载C ++共享库的实例。 (例如说exm1.so,exm2.so等)。
首先让我告诉您C ++共享库不是线程安全的。因此,我们正在使用C ++共享库的一个实例加载JVM创建的每个线程。 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文件中都有C ++ malloc函数调用。 JVM有效地管理此内存ptr。
答案 0 :(得分:1)
不,通常,您必须通过synchronized
构造自己管理安全的多线程,以保护对共享资源的访问。
答案 1 :(得分:0)
我得到了正确的答案。通过JAVA在Linux中的dlopen未默认设置为RTLD_LOCAL。我已经通过明确相同。有效。