【发布时间】:2011-03-14 21:57:46
【问题描述】:
我有一个 Java 应用程序,它通过 JNI 调用旧应用程序的许多不同的本地方法。但是 JVM 在任何 JNI 调用之外的随机位置发生堆栈转储而崩溃。有时它在 GC 期间崩溃,有时在类加载和其他地方。我怀疑一个或多个本机方法正在破坏 JVM 堆或其他一些数据结构。我需要知道这是哪个调用,以便修复本机实现。
旧版应用程序是第 3 方 DLL,我没有它的源代码和符号信息。为了使它可以从 Java 中调用,我构建了一个使用 JNI 调用约定的包装 DLL。
完美的解决方案是扩展 JVM 选项,强制 JVM 在每次 JNI 调用后自动检查堆及其其他数据结构的完整性。
你知道什么可以提供帮助吗?
附:请不要告诉我在 JVM 和遗留应用程序之间构建套接字或管道层,因为我们的要求不允许这样做。这是关于错误检测,而不是架构设计。
【问题讨论】:
-
我假设你知道
-Xcheck:jni? -
我有同样的问题,如果这有帮助的话:/ 我有很多数据通过 JNI 传输,有时我会收到损坏的地址和数据包数据。它把整个模拟搞砸了,真的很烦人。
标签: java java-native-interface