問題:在Java里面使用instanceof的性能影響
我正在寫一個應用程序,其中一種設計方案包含了instanceof操作的大量使用。雖然我知道面向對象設計通常試圖避免使用instanceof,但那是另一回事了,這個問題純粹只是討論與性能有關。我想知道這是否會對性能產生任何影響?它和 ==一樣快速嗎?
例如,我有一個有10個子類的父類。在接受父類作為參數的單個函數中,我檢查這個類是否是子類的實例,并執行一些程序。
我想到的解決它的另一種方法是使用一個“type id”原始整型代替,并使用掩碼表示子類的類別,然后只讓子類“type id”和一個常量掩碼做一次掩碼的比較,比較的結果就用來表示類別。
instanceof是否被JVM優化到比這更快?我想堅持使用Java,但是這個應用程序的性能是至關重要。如果以前有過類似經歷的人能提供一些建議,那就太棒啦。我是不是太挑剔了,或者說把注意力放在優化錯誤的東西上面了?
回答
現代的JVM/JIT編譯器已經消除了大多數傳統的“慢”操作(包括實例化、異常處理、反射等。)產生的性能影響。
正如Donald Knuth所寫,“我們應該忘記小的效率問題,可以說大約97%的情況下:過早的優化是萬惡之源。”instanceof的性能可能還沒有成為一個問題,所以不要浪費時間去想一些復雜的解決方案,除非你確定這已經出現問題了。
文章翻譯自Stack Overflow:https://stackoverflow.com/questions/103564/the-performance-impact-of-using-instanceof-in-java