2016-05-13 95 views
0

我有一個Java程序,可以執行許多小型數組操作。我已經運行它並驗證它沒有產生錯誤,但它比預期的要慢。我假設很多這種放緩與檢查數組邊界等有關。運行沒有數組邊界的邊界檢查,Cast檢查等

是否有一種方法可以禁用所有錯誤檢查,以便我可以更快地運行我的程序(存在風險,它只是崩潰,而不是生成可理解的錯誤)?

+3

它可以代替解釋你的陣列正在試圖解決它會更容易幫助你的problam。它或多或少從未建議嘗試通過黑客手段來加快代碼速度。幾乎100%的時間,java編譯器都會打敗你的代碼。 – Marthin

+3

你是怎麼得出結論說問題是檢查界限的?你有沒有介紹你的申請?你是否認爲邊界檢查是瓶頸? – RealSkeptic

回答

0

不,這是不可能的,因爲這會在發生錯誤時破壞JVM。

2

不,這是不可能的。 Java語言規範描述了在什麼情況下強制轉換和數組訪問會引發異常,但沒有提到禁止這種行爲的機制。

ClassCastException投擲在JLS Section 15.6描述:

  • 轉換表達式(§15.16)如果鑄造被發現是在運行時不允許拋出一個ClassCastException。

陣列邊界檢查在JLS Section 15.10.4描述:

在運行時,一個數組訪問表達式的求值的行爲如下:

  • 首先,數組引用表達是評估。如果此評估突然完成,則出於同樣的原因,數組訪問會突然完成,並且不評估索引表達式。

  • 否則,將評估索引表達式。如果此評估突然完成,則出於同樣的原因陣列訪問會突然完成。

  • 否則,如果數組引用表達式的值爲null,則拋出NullPointerException。

  • 否則,數組引用表達式的值實際上是指數組。如果索引表達式的值小於零,或者大於或等於數組的長度,則引發ArrayIndexOutOfBoundsException

  • 否則,數組訪問的結果是類型T的變量,在數組中,由索引表達式的值選擇。