我们有这个本机应用程序,它在其进程中启动一个jvm,并使用JNI来调用Java代码。
我们将jvm.dll的位置放在路径中(这是在Windows上)以便可以加载它,我们注意到当我们使用'client'目录时,一切正常,但是在编译时作为32位,当我们使用'server'目录时,JNI_CreateJavaVM()失败,返回值为-4。
据我所知,JVM的客户端和服务器版本都应该可以正常工作,所以发生了什么?
答案 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(它预先抓住所有内存) ,在跑步之前)。也许您的服务器版本要求“足够”以推动限制。