我正在使用一个加载dll库的jni应用程序,但它的负载耗时太长。 dll在路径中。作为一个相关的信息,这个dll依赖于其他也在路径上的oracle dll。
System.loadLibrary("exmaple.dll");
你知道为什么负载永远不会结束吗?
答案 0 :(得分:0)
首先,您可能需要确定JNI是否会降低负载,或者DLL是否只在Windows中加载缓慢。
您可以使用命令
测试加载dllrundll32 example.dll,testMethod
您将收到测试方法不存在的错误,但它将加载DLL及其依赖项。你可以花时间看看需要多长时间。
如果使用Rundll32缓慢加载,请尝试关闭病毒检查程序。还要检查你有多少可用内存。
如果JNI减慢了速度,可以尝试切换到JNA作为替代方案。
答案 1 :(得分:0)
我做了一些测试,似乎与线程有关。当我在loadLibrary调用中放置一个断点时,它不会进入下一步。在我重新激活应用程序中的其他线程后,它才会进入下一步。我无法确定这是一个java bug还是一些线程问题。我正在使用JDK1.6.0_11。
如果将来有人遇到同样的问题,请检查线程问题。