2012-01-19 94 views
4

关闭此Java应用程序时,我的Java应用程序JVM(1.6.0_26,32位)偶尔发生崩溃。 这种间歇性的JVM崩溃问题似乎只影响64位Windows操作系统。 在32位Windows操作系统和Mac OS X上不会发生此问题。 任何人都可以告诉我这样做的原因。 实际上,这个Java应用程序使用100-150个库,并且在执行时不会崩溃,一旦应用程序关闭发生崩溃。 在64位机器上使用32位JVM是否合适?64位机器上的JVM 32位崩溃

非常感谢您的帮助。

+0

该应用程序在结束时是否做了特别的事情?特别是,任何操作系统相关 – madth3

+2

你会遇到JVM崩溃吗?崩溃报告中有什么?你考虑在'退出'时发生的任何特殊行为 - 比如关闭句柄,其他JNI相关的东西等。 – Jayan

+0

不,它不会执行与操作系统相关的任何操作。 – sneha

回答

1

简答题是否定的。在64位机器上使用32位JVM是不合适的。较长的回答是Windows 64位操作系统可以在兼容模式下运行32位程序,如果没有选项的话。

由于64位JVM在Windows操作系统上运行良好,因此确实没有必要这样做。这也意味着您的进程可以利用比32位进程可以使用的更多的内存和速度。

http://msdn.microsoft.com/en-us/library/aa384249(v=vs.85).aspx

+0

由于我们的一些应用程序使用专有的32位本地数据库驱动程序,我不得不在Windows 64位上使用32位JVM。 64位JVM拒绝加载它们。但是,32位JVM运行良好(据我所知)。 –

+0

非常感谢您的输入。无论如何,在64位机器上运行带有32位JVM的32位应用程序?我在java中遇到问题,为什么你共享msdn链接? – sneha

+0

MSDN链接讨论64位Windows如何运行32位进程。我认为你需要阅读它,看看你是否遵循了所有关于在64位机器上模拟32位进程的假设。如果您使用带有本机代码的32位数据库驱动程序,它可能不是Java即将消亡。这可能是您的驱动程序,这是问题所在。看看你的崩溃报告,看看它崩溃时的代码是什么。如果它在驱动程序中,那么证明32位仿真驱动程序存在问题。你可以删除驱动程序,并使用类型4的JDBC驱动程序与另一个数据库像MySQL? – chubbsondubs

0

有,我安装我的JVM的32位在64位的Win7类似的问题,一切工作顺利,直到第三方OLE桥被加载。 JVM给出了一个崩溃报告,称Java二进制文件停止工作,崩溃报告代码的值为HEAP_MEMORY_CORRUPTION。这很奇怪,因为当我连接一个探查器时,堆已经远远低于最大限度。我怀疑我的Bridge提供者在WOW64下模拟时不允许执行一些内核模式(如果可能的话)。

我解决了我的问题。当ole填充微软办公室,它不能填充2007年,而是当我安装2003年,它的工作。请检查您的应用程序是否立即崩溃,或者是否有本地电话正在发生,这样您就可以找出问题所在。