gpt4 book ai didi

java - 从 VB6 调用使用 JNI 的 dll 时,来自 JNI_CreateJavaVM 的 JNI_ENOMEM

转载 作者:行者123 更新时间:2023-11-30 05:10:50 24 4
gpt4 key购买 nike

我在一个遗留系统上工作,该系统有一个需要调用 Java 代码的 VB6 应用程序。我们使用的解决方案是让 VB 应用程序调用 C++ dll,该 dll 使用 JNI 来调用 Java 代码。有点时髦,但实际上效果很好。然而,我正在搬到一个新的开发盒,我刚刚遇到了一个严重的问题。构建的 VB 应用程序在新机器上运行良好,但当我尝试从 VB 运行它时,DLL 无法加载 VM,从 JNI_CreateJavaVM 获取返回码 -4 (JNI_ENOMEM)。

构建的应用程序和 VB 都调用完全相同的 dll,并且我已经使用 Java 1.5 和 1.6 进行了尝试。我已经尝试过建议here (将 stdout 和 stderr 重定向到文件,添加 vfprint 选项,添加 -Xcheck:jni 选项),但无济于事。我似乎无法从 jvm 中获取任何其他信息。据我所知,新机器的配置与旧机器几乎相同(安装的软件、路径、类路径等),并且两者都运行相同版本的 Windows Server 2003。新机器是 x64具有更多内存(4GB 而不是 2GB)的盒子,但它运行的是 32 位 Windows。

对于其他需要研究的内容有什么建议或想法吗?以更理智的方式重写整个事情不是一个选择——我需要找到一种方法让 dll 让 jvm 加载,而不认为它内存不足。任何帮助将不胜感激。

最佳答案

好的,我已经弄清楚了。正如 kschneid 指出的,JVM 在应用程序的内存空间中需要相当大的连续内存块。因此,我使用 sysinternals VMMap 实用程序来查看 VB 的内存情况。事实上,没有大块可用内存,并且有一些属于 Visio 的库被加载到似乎被设计为碎片内存的位置。事实证明,当我在新机器上安装 Visio 时,它自动将 Visio UML 插件安装到 VB 中。由于我不使用此加载项,因此我将其禁用。禁用加载项后,有大量连续的可用内存,现在 JVM 加载得很好。

关于java - 从 VB6 调用使用 JNI 的 dll 时,来自 JNI_CreateJavaVM 的 JNI_ENOMEM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com