0

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

我们将 jvm.dll 的位置放在路径中(这是在 windows 上)以便可以加载它,我们注意到当我们使用“客户端”目录时,一切正常,但编译为 32-位,当我们使用“服务器”目录时,JNI_CreateJavaVM() 失败,返回值为 -4。

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

4

1 回答 1

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(它会在运行之前预先获取所有内存) )。也许您的服务器版本要求“刚好够”来推动限制。

于 2013-03-12T18:00:30.430 回答