類載入過程 自我總結,會不詳細

2021-10-25 04:42:05 字數 1258 閱讀 5944

1.載入  

根據類的全限定名,載入對應目錄下的位元組碼檔案,在方法區生成class物件,提供資料訪問的入口。

2.驗證

1.檢驗位元組碼的格式規範,比如說cafe babe彩蛋。

2.檢驗語義規範,檢查final標記的類是否有子類,final方法是否被子類重寫.

3.操作驗證

==> 在運算元棧中的資料必須進行正確的操作,對常量池中的各種符號引用執行驗證

==>(通常在解析階段執行,檢查是否通過引用中描述的全限定名定位到指定型別上,以及類成員資訊的訪問修飾符是否允許訪問等)

3.準備

1.負責為類中static變數分配空間,並初始化(與程式無關,系統初始化)

2.被final修飾的靜態變數,會直接賦予原值;

==>2,3表面意思都是常量。

3.類字段的字段屬性表中存在constantvalue屬性,則在準備階段,其值就是constantvalue的值。

4.解析

1. 將常量池中所有符號引用轉換為直接引用(得到類或者字段、方法在記憶體中的指標或者偏移量,以便直接呼叫該方法),這個可以在初始化之後再執行。可以認為是一些靜態繫結的會被解析,動態繫結則只會在執行時進行解析;

2. 靜態繫結包括一些final方法(不可以重寫),static方法(只會屬於當前類),構造器(不會被重寫)

5.類初始化

呼叫,例項物件的時候,呼叫,兩者是有區別的,前者只對靜態變數和靜態**塊進行初始化操作。

1. 初始化階段負責將所有static域按照程式指定操作對應執行(賦值static變數,執行static塊)。

2. 如果執行的是static**塊,那麼在初始化階段,jvm就會執行static**塊中定義的所有操作。

3. 所有類變數初始化語句和靜態**塊都會在編譯時被前端編譯器放在收集器裡頭,存放到乙個特殊的方法中,這個方法就是方法,即類/介面初始化方法。

==> 該方法的作用就是初始化乙個中的變數,使用使用者指定的值覆蓋之前在準備階段裡設定的初始值。任何invoke之類的位元組碼都無法呼叫方法,因為該方法只能在類載入的過程中由jvm呼叫。

==> 如果父類還沒有被初始化,那麼優先對父類初始化,但在方法內部不會顯示呼叫父類的方法,由jvm負責保證乙個類的方法執行之前,它的父類方法已經被執行。

==> jvm必須確保乙個類在初始化的過程中,如果是多執行緒需要同時初始化它,僅僅只能允許其中乙個執行緒對其執行初始化操作,其餘執行緒必須等待,只有在活動執行緒執行完對類的初始化操作之後,才會通知正在等待的其他執行緒。

==>上述階段通常都是交叉混合允許,沒有嚴格的先後執行順序;

Python庫總結會

scikit surprise是易於使用的python scikit,適用於推薦系統 gensim scikit learn是簡單有效的資料探勘和資料分析工具 whoosh是快速,純粹的python搜尋引擎庫 recsys是提供了構建和評估許多推薦系統 演算法效能的工具 lenskit是一組用於試驗...

部門總結會(0428)

今天參加了部門組織的專案總結會。受益匪淺,特此記錄。總體上,這次分享會是比較成功的,因為實現了 業務 與 政治 的雙重目的。業務上,大家一起回顧了專案,分享了自己的心得。通過一些討論,加深了對一些問題的認識。政治上,總結會從一開始的拘謹逐漸走向歡聲笑語,大家加深了對彼此的了解,也拉近了彼此的關係。這...

無用的專案總結會

一般軟體開發組織,在軟體專案結束時會進行專案總結會,利用專案中的統計資料對專案中發生的成敗得失進行總結分析,然後制定出改進計畫,以希望在下次專案可以做的更好。然而,多年過去之後,對比一下現在的資料和當初的資料,基本上可以得出乙個結論 這麼多年沒有絲毫改進,甚至還有退步的跡象。這是發生在很多地方的現象...