2010-06-26 48 views
3

JVM或CLR(通用語言運行庫)如何處理除以零的句柄? 每次執行除法指令之前是否檢查分母? 還是使用處理器引發的「除以零」陷阱時調用的回調函數進行處理?在JVM(Java)或CLR(C#)中運行時異常處理(如除以零)

任何輸入將不勝感激。

謝謝你,艾倫

+1

CLR引發異常。 – 2010-06-26 15:58:04

+1

我的問題是拋出異常的過程是什麼? – Invincible 2010-06-26 16:26:03

+0

對不起朋友,我不想粗魯。但是,我想知道,如何「除以零」異常得到處理,而不僅僅是關於如何做到這一點的意見。 每種實施方案都存在權衡 1)檢查每個除法操作的分母可能會影響性能。 2)通過OS陷阱例程的回調函數處理異常是複雜的設計選擇。 因此,我想知道.Net或Java採用哪種設計方案? – Invincible 2010-06-26 17:38:12

回答

6

我知道產生這種硬件陷阱所有的處理器。哪一個由操作系統處理,並通過操作系統依賴機制(信號,異常等)反映到用戶模式代碼中。運行時選擇並轉換爲Java或.NET異常。

1

這是一個實現細節,因爲您不應該關心虛擬機背後發生的事情(如果您必須關心它,您將失去真正的可移植性!)。

但是,由於託管代碼是jitted,因此總是執行除法運算,並且在零分母的情況下,處理器將拋出第一個機會異常,該異常將被運行時捕獲,然後反映爲高級異常。

+0

+1,但我認爲從頭到尾都不會有什麼傷害。 – 2010-06-26 17:10:43

+0

當然,沒有傷害!但值得強調的是,當你不必知道實現時,就意味着你不會遇到可移植性問題。 – Wizard79 2010-06-26 17:21:52