Java try/catch的實現原理與性能

首先,try/catch怎麼寫呢?如下圖所示:

      

       那麼try catch到底在JVM底層是如何實現的呢?

              首先明確一個概念,在Java中如果不發生異常的話,try/catch其實不會造成任何性能損失。這是如何做到的呢

  1. 首先,在Java文件編譯成爲字節碼之後,其實正常流程與異常處理部分是分開來的,如下圖所示:

                                                                  

                                                

              每個有異常處理的方法其實在class文件中都是一個異常表,這個表中的內容與每個try/catch塊相對應,每一行由四個內容組成:開始位置、結束位置、異常處理的偏移位、一個異常緩衝池,如下圖所示:

                                           

  1. 2.當代碼在運行時拋出了異常時,首先拿着拋出位置到異常表中查找是否可以被catch(例如看位置是不是處於任何一欄中的開始和結束位置之間),如果可以則跑到異常處理的起始位置開始處理,如果沒有找到則原地return,並且copy異常的引用給父調用方,接着看父調用的異常表,以此類推。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章