詳解java程序一個new的過程

在java的世界裏,只要當我們去創建一個對象時,都是通過關鍵字去new的,那麼當我們寫完這個new之後,我們的程序是怎麼幫我們生成這個對象的呢?帶着這個問題,我們一起來討論一下:

首先當虛擬機接受到new的字節碼指令的時候,先要去常量池中,看能否找到這個類的符號引用信息;當我們沒有找到的這個信息的時候,就會去執行這個類的加載信息過程;加載完成後,java虛擬機就會給我們創建的對象去分配內存。

分配內存的方式有兩種:

  • 指針碰撞:就是對內存空間分成完整的兩部分,一部分是已使用的內存塊,一部分是未使用的內存塊,分配內存時,就是通過移動指針的位置,來分配內存。
  • 空閒列表:內存空間,已使用部分和未使用部分,沒有明確的劃分,相互交錯在一起。這個時候需要去維護一個列表,來表明那些是已存在的數據,那些是未使用的數據。

內存分配完成之後,就需要給對象的數據設置默認值:對於String的默認值就是爲null,Integer的默認只就是0;然後就會對對象的頭信息進行賦值:如GC分代信息,鎖信息等;

上述操作都完成後,就會執行構造方式去設置實體屬性的值。至此一個對象就在內存中完成了創建。其流程圖如下所示:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章