如何解决Java JVM加载失败?

Rem*_*eau 6 java jvm

我正在开发一个用C++ Builder 6编写的大型(15MB)传统32位应用程序,它需要使用第三方API与外部系统进行交互.API由一组内部使用Java的DLL组成(我假设是JNI).我们的代码只与一个特定的DLL直接交互,并且在运行时延迟加载.

当应用程序在客户的系统上运行时,DLL因未知原因而崩溃.所以我试图在我的系统(XP Pro 32bit)上重现并遇到了另一个问题.

该应用程序创建一个尝试初始化API的线程,该线程在内部尝试加载Java JVM并失败,并且API将"JVM创建失败"错误报告回我的代码.

但是,在小型测试应用程序中运行的完全相同的线程代码可以正常工作,Java加载得很好,API功能正常.

这两个应用程序都是从同一个文件夹运行的,因此它不是定位API DLL或Java JVM DLL的路径问题.我还确保两个项目都使用相同的编译器/链接器设置来进行内存使用,堆大小,对齐,处理器类型等.

我在网上看到一个引用建议JVM需要调用进程的地址空间来获得大部分连续内存,这是真的吗?如果是这样,多少钱?

我尝试在Java控制面板中启用日志记录/跟踪,但没有记录任何有用的内容.

有没有办法找出为什么Java在主应用程序调用时无法加载,而不是测试应用程序?

小智 2

看来应用程序正在以较少的内存启动。

jre 用于启动 JVM 的默认内存取决于系统配置。很可能默认内存不够大,无法加载所有类并运行 OOM。

在测试应用程序上复制的更好方法是将堆内存减少到 64,然后看看发生了什么。这样我们就可以更接近地了解这是否真的是内存问题。