java 加载中_Java 6类加载中更快的是什么?
小編典典
Java 6編譯器將預驗證信息添加到類文件中
如果Java虛擬機實現曾經嘗試對50.0版類文件執行通過類型推斷的驗證,則在通過類型檢查的驗證失敗的所有情況下都必須這樣做。
這意味著Java虛擬機實現無法選擇在一種情況下而不是在另一種情況下求助于類型推斷。它必須拒絕未通過類型檢查進行驗證的類文件,或者必須在類型檢查失敗時始終將故障轉移到類型推斷驗證程序。
對于每個具有Code屬性的方法,類型檢查器都需要一個堆棧映射框架列表。類型檢查器為每種此類方法讀取堆棧映射框架,并使用這些映射生成Code屬性中指令的類型安全性證明。
從Java
6,類文件50.0及更高版本開始,JVM可以在類文件驗證期間使用類型檢查或類型推斷。在試圖了解性能優勢之前,什么是類型檢查和類型推斷?本文面向對象的編程語言的類型檢查和類型推斷指出:
類型系統是編程語言的重要組成部分。完全依賴于運行時類型檢查的語言提供了高度的靈活性,但通常必須為此犧牲性能。
并從維基百科上進行類型推斷:
類型推斷是在編譯時自動部分或完全推斷表達式類型的能力。[…]
為了獲得推斷表達式類型所需的信息,編譯器要么以匯總形式收集此信息,然后對為其子表達式指定的類型注釋進行縮減,要么通過對各種原子值的類型的隱式理解[…
]。
當前有兩種分析字節碼以確定每種指令將出現的操作數的類型和數量的方法。傳統方法稱為“類型推斷”,它通過對每個字節碼執行抽象解釋并在分支目標或異常句柄處合并類型狀態來進行操作。分析遍歷字節碼,直到找到類型的穩定狀態為止。如果找不到穩定狀態,或者生成的類型違反某些字節碼約束,則將引發VerifyError。[…]
JDK6中的新增功能是第二種驗證方法,稱為“類型驗證”。在這種方法中,Java編譯器通過代碼屬性StackMapTable為每個分支或異常目標提供穩態類型信息。StackMapTable由許多堆棧映射框架組成,每個框架映射框架指示表達式堆棧上以及方法中某些偏移處的局部變量中的項目類型。然后,JVM只需要對字節碼執行一次遍歷,即可驗證類型的正確性,從而驗證字節碼。[…]
類型檢查意味著JVM可以一次遍歷類文件來驗證類型系統。類型推斷需要多次通過。這是否可以節省大量的性能?這可能與應用程序中類的總數以及小于50.0(Java
6)且大于50.0的類文件的數量有關。如果您的應用程序不是性能至關重要的應用程序,那么我就不必擔心。如果是這樣,則可以在將應用程序編譯為Java
5和Java 6類文件時運行一些基準測試,以比較性能差異。
2020-12-03
總結
以上是生活随笔為你收集整理的java 加载中_Java 6类加载中更快的是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java蓝牙电话_Android med
- 下一篇: java 单例模式 泛型_设计模式之架构