程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java類型性命周期的具體解析

java類型性命周期的具體解析

編輯:關於JAVA

java類型性命周期的具體解析。本站提示廣大學習愛好者:(java類型性命周期的具體解析)文章只能為提供參考,不一定能成為您想要的結果。以下是java類型性命周期的具體解析正文


開端階段

裝載:把二進制情勢的java類型讀入jvm中。
1)經由過程該類型的完整限制名,發生一個代表該類型的二進制數據流;
2)解析這個二進制數據流為辦法區內的外部數據構造;
3)創立一個表現該類型的java.lang.Class類的實例;

銜接:把已讀入的類型數據歸並到虛擬機的運轉時狀況中。
1)驗證:確保java類型數據格局准確而且實用於jvm應用;
2)預備:為該類型分派內存;
3)解析:把常量池中的符號援用轉換為直接援用;

初始化:每一個類和接口在初次自動應用時初始化。為類變量付與准確的初始值;
1)假如類存在直接超類,且直接超類沒有被初始化,先初始化直接超類;
2)假如類存在初始化辦法,就履行此辦法;

只要六種運動被以為是自動應用:
1)、創立類的新實例
2)、挪用類中聲明的靜態辦法
3)、操作類或許接口中聲明的異常量靜態字段
4)、挪用Java API中特定的反射辦法
5)、初始化一個類的子類
6)、指定一個類作為jvm啟動時的初始化類

應用階段(絕年夜部門時光)

實例化

實例化門路
明白實例化一個類的四種門路:
1)、new操作符;
2)、挪用Class或許Java.lang.reflect.Constructor對象的newInstance()辦法;
3)、挪用任何現有對象的Clone()辦法;
4)、經由過程java.io.ObjectInputStream類的getObject()辦法反序列化;

隱含實例化的幾種門路:
1)、保留敕令行參數的String對象;
2)、和類裝載相干,jvm裝載的每個類型,會黑暗實例化一個Class對象來代表這個類型;
3)、和類裝載相干,當jvm裝載了在常量池中包括CONSTANT_String_info進口類的時刻,會創立新的String對象的實例來表現這些常量字符串;
4)、經由過程履行包括字符串聯接操作符的表達式發生對象;

實例化步調
1)、在堆中為保留對象的實例變量分派內存;
2)、為實例變量初始化為默許的初始值;
3)、為實例變量賦准確的初始值,有三種技巧完成賦值:
  a)、假如對象是clone() 創立的,jvm把原實例變量中的值拷貝到新對象中;
  b)、假如是經由過程ObjectInputStream類的readObject()挪用反序列化的,jvm從輸出流中讀取的值來初始化實例變量;
  c)、jvm挪用對象的實例化辦法把對象的實例變量初始化為准確的初始值;

渣滓搜集和對象終結
jvm完成必需具有某種主動堆存儲治理戰略,年夜部門是應用渣滓搜集器。假如類聲清楚明了 void finalize()辦法,渣滓搜集器在釋放實例內存前會履行這個辦法。

渣滓搜集器主動挪用的finalize()辦法拋出的任何異常都將被疏忽。

停止階段

從jvm中卸載類型
許多情形,jvm中類的性命周期和對象的性命周期很類似。jvm若何斷定靜態裝載的類型能否依然被法式應用,其斷定方法和斷定對象能否依然被應用很類似。

假如法式不再援用某類型,那末類型就是弗成觸及的,便可以被卸載。

應用啟動類裝載器裝載的類型永久都是可觸及的,所以永久不會被卸載。只要應用用戶界說的類裝載器裝載的類型才會釀成弗成觸及,才會被卸載。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved