2012-01-19 120 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年,它的工作。請檢查您的應用程序是否立即崩潰,或者是否有本地電話正在發生,這樣您就可以找出問題所在。