如何解决Java JVM加载失败?

时间:2014-07-02 01:26:55

标签: 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在主应用程序调用时无法加载,而不是测试应用程序?

1 个答案:

答案 0 :(得分:1)

似乎应用程序正以较少的内存启动。

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

最好在您的测试应用上复制,将堆内存减少到64,然后看看发生了什么。这样,如果真的存在内存问题,我们可能会更接近。