gpt4 book ai didi

java - Java JVM加载失败如何排查?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:32:39 27 4
gpt4 key购买 nike

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

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

该应用程序创建了一个尝试初始化 API 的线程,该线程在内部尝试加载 Java JVM 但失败了,并且 API 向我的代码报告“JVM 创建失败”错误。

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

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

我在网上看到一个引用资料,建议 JVM 需要调用进程的地址空间才能有一大段连续 内存可用,这是真的吗?如果有,多少钱?

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

有什么方法可以找出为什么 Java 在被主应用而非测试应用调用时加载失败?

最佳答案

应用程序似乎是在内存较少的情况下启动的。

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

在您的测试应用程序上复制更好的方法是将堆内存减少到 64,然后看看发生了什么。通过这种方式,我们可能会更接近于确定它是否真的是内存问题。

关于java - Java JVM加载失败如何排查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24521549/

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