JNI:客户端jvm.dll与服务器jvm.dll

时间:2013-03-12 17:31:19

标签: java java-native-interface

我们有这个本机应用程序,它在其进程中启动一个jvm,并使用JNI来调用Java代码。

我们将jvm.dll的位置放在路径中(这是在Windows上)以便可以加载它,我们注意到当我们使用'client'目录时,一切正常,但是在编译时作为32位,当我们使用'server'目录时,JNI_CreateJavaVM()失败,返回值为-4。

据我所知,JVM的客户端和服务器版本都应该可以正常工作,所以发生了什么?

1 个答案:

答案 0 :(得分:1)

看起来很奇怪你正在创建一个无法启动的JVM,因为它被配置为使用的内存比可用内存多。

#define     JNI_OK   0
#define     JNI_ERR   (-1)
#define     JNI_EDETACHED   (-2)
#define     JNI_EVERSION   (-3)
#define     JNI_ENOMEM   (-4)
#define     JNI_EEXIST   (-5)
#define     JNI_EINVAL   (-6)

当然,还有其他解释;但是,您会检查系统的可用内存,配置参数和最大进程大小(如果您使用的是旧版本的Windows)。我认为这可能是你遇到的问题。

它还可以解释“工作但现在不起作用”的问题,因为可能在失败时,系统没有足够的可用内存来提交JVM(它预先抓住所有内存) ,在跑步之前)。也许您的服务器版本要求“足够”以推动限制。