<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 類的生命周期 ![](https://img.kancloud.cn/39/aa/39aab994748bbc228b30b14b38b918a9_529x200.png) JVM類加載過程可劃分為三個過程:裝載、鏈接和初始化 初始化過程不是加載類時必須觸發的,但最遲必須在初次主動使用對象前執行,其所作的動作為給靜態變量賦值、調用&lt;clinit&gt;\(\)等; JVM通過類的全限定名+ClassLoader實例ID唯一標識一個被加載的類 ##### 加載 加載階段主要完成三件事,即通過一個類的全限定名來獲取定義此類的二進制字節流,將這個字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構,在Java堆中生成一個代表此類的Class對象,作為訪問方法區這些數據的入口。這個加載過程主要就是靠類加載器實現的,這個過程可以由用戶自定義類的加載過程 ##### 驗證 這個階段目的在于確保class文件字節流中包含的信息符合當前虛擬機要求,不會危害虛擬機自身安全。 主要包括四種驗證: 1. 文件格式驗證:基于字節流驗證,驗證字節流是否符合Class文件格式的規范,并且能被當前虛擬機處理; 2. 元數據驗證:基于方法區的存儲結構驗證,對字節碼描述信息進行語義驗證; 3. 字節碼驗證:基于方法區的存儲結構驗證,進行數據流和控制流的驗證; 4. 符號引用驗證:基于方法區的存儲結構驗證,發生在解析中,是否可以將符號引用成功解析為直接引用 ##### 準備 僅僅為類變量(即static修飾的字段變量)分配內存并且設置該類變量的初始值即零值,這里不包含用final修飾的static,因為final在編譯的時候就會分配了(編譯器的優化),同時這里也不會為實例變量分配初始化。類變量會分配在方法區中,而實例變量是會隨著對象一起分配到Java堆中 ##### 解析 解析主要就是將常量池中的符號引用替換為直接引用的過程。符號引用就是一組符號來描述目標,可以是任何字面量,而直接引用就是直接指向目標的指針、相對偏移量或一個間接定位到目標的句柄。有類或接口的解析,字段解析,類方法解析,接口方法解析 ##### 初始化 初始化階段依舊是初始化類變量和其他資源,這里將執行用戶的static字段和靜態語句塊的賦值操作。這個過程就是執行類構造器&lt; clinit &gt;方法的過程。 &lt; clinit &gt;方法是由編譯器收集類中所有類變量的賦值動作和靜態語句塊的語句生成的,類構造器&lt; clinit &gt;方法與實例構造器&lt; init &gt;方法不同,這里面不用顯示的調用父類的&lt; clinit &gt;方法,父類的&lt; clinit &gt;方法會自動先執行于子類的&lt; clinit &gt;方法。即父類定義的靜態語句塊和靜態字段都要優先子類的變量賦值操作 ### 基本的加載流程 尋找jre目錄,尋找jvm.dll,并初始化JVM; 產生一個Bootstrap Loader(啟動類加載器); Bootstrap Loader,該加載器會加載它指定路徑下的Java核心API,并且再自動加載Extended Loader(標準擴展類加載器),Extended Loader會加載指定路徑下的擴展JavaAPI,并將其父Loader設為BootstrapLoader。 Bootstrap Loader也會同時自動加載AppClass Loader(系統類加載器),并將其父Loader設為ExtendedLoader。 最后由AppClass Loader加載CLASSPATH目錄下定義的類,HelloWorld類。 創建自己的類加載器 在Java應用開發過程中,可能會需要創建應用自己的類加載器。典型的場景包括實現特定的Java字節代碼查找方式、對字節代碼進行加密/解密以及實現同名Java類的隔離等。創建自己的類加載器并不是一件復雜的事情,只需要繼承自java.lang.ClassLoader類并覆寫對應的方法即可 【參考資料】 [https://blog.csdn.net/CSDN\_980979768/article/details/47281037](https://blog.csdn.net/CSDN_980979768/article/details/47281037)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看