首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行在eclipse中的Java应用程序,随机的“致命错误”

运行在eclipse中的Java应用程序,随机的“致命错误”
EN

Stack Overflow用户
提问于 2014-09-26 06:15:43
回答 2查看 622关注 0票数 0

我编写了一个简短的应用程序,将文件从原始数据转换为XML (ECG)。我有大约350000个文件要转换,转换本身是通过我从心电设备制造商那里得到的库完成的。为了利用机器中的多个处理器和核心来进行转换,我编写了一个“包装程序”,它创建了一个线程池,然后用于在单独的线程中进行转换。它的工作原理有点好,但不幸的是,我确实得到了导致整个应用程序停止的随机错误(85k文件在过去的3-4天中已经被转换,我有四个这样的错误):

代码语言:javascript
复制
A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x71160a6c, pid=1468, tid=1396

JRE version: Java(TM) SE Runtime Environment (8.0_20-b26) (build 1.8.0_20-b26)
Java VM: Java HotSpot(TM) Client VM (25.20-b23 mixed mode windows-x86 )
Problematic frame:
C  [msvcr100.dll+0x10a6c]

我会怀疑是我使用的库导致了这些,所以我认为我不能做那么多的事情来修复它。如果发生了这个错误,我会运行程序,然后让它在崩溃之前从原来的位置开始。现在,我必须手动这样做,但我希望有一些方法可以让Eclipse重新启动程序(带有文件名的参数)。有没有人知道有什么办法可以做到?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-26 06:46:20

还不完全清楚,但我认为您是说您有一个第三方Java库(带有本机代码组件),您使用多个线程在一个JVM中运行。

如果是这样的话,我怀疑问题在于第三方应用程序的本机部分没有正确的多线程,这是崩溃的根本原因。(我不认为你想找出问题的原因.)

与其使用一个JVM和多个转换器线程,不如使用多个JVM,每个JVM使用一个转换器线程。您可以通过静态地划分工作,或者通过某种形式的排队机制,在JVM之间扩展转换。

或者..。您可以修改现有的包装器,以便线程使用ProcessBuilder在单独的JVM中启动转换器。如果转换器JVM崩溃,启动它的包装线程可能会再次启动它。或者,它只需记录一下转换失败的情况,然后转到下一个转换。(您需要在重试时小心一些,以防正在转换的文件中的某些内容触发JVM崩溃。)

作为记录,我不知道现有的“现成”解决方案。

票数 1
EN

Stack Overflow用户

发布于 2014-09-26 06:26:40

您似乎正在使用x86 (32位)版本的Java。也许您可以尝试使用x64 (64位)版本。在过去,这对我来说是有用的。

问题似乎在本机库中,但是如果您用64位Java尝试它,它将使用64位版本的本机库?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26053192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档