jvm即:
j**a virtual machine
(j**a
虛擬機器);jvm直接與作業系統進行互動;不
會直接與伺服器硬體進行互動。如圖:
1、 j**a檔案經過j**ac編譯之後變成
class
位元組碼檔案;
2、 位元組碼檔案被classloader類載入器
搬運到jvm虛擬機器中;
3、 虛擬機器當中主要有五大塊:
a) 方法區:執行緒共享區域,存在多執行緒安全問題,主要存放全域性變數,常量,靜態變數等;
b) 堆:執行緒共享區域,存在多執行緒安全問題,主要存放物件例項和陣列等;
c) 虛擬機器棧:執行緒不同享區域,不存在多執行緒安全問題,主要存放區域性變數等;
d) 本地方法棧:執行緒不共享區域,不存在多執行緒安全問題,主要負責去呼叫一些底層的c程式
實現,一般不做研究;
e) 程式計數器:執行緒不共享區域,不存在多執行緒安全問題,一般不做研究;
animal.j**apublicclassanimal
合併初始化,為類的靜態變數賦予正確的初始值。
3.1.4、使用,解除安裝
使用:正常使用
解除安裝:gc把無用的物件從記憶體中解除安裝。
負責載入$j**a_home中
jre/lib/rt.jar
裡所有的
class
。2)extension classloader
負責載入j**a平台中擴充套件功能的一些 jar 包
,包括$j**a_home中
jre/lib/*.jar
或-dj**a.ext.dirs
指定目錄下的
jar
包。負責載入
classpath
中指定的 jar 包及目錄中 class。
4)custom classloader
屬於應用程式根據自身需要自定義的 classloader。
載入過程中會先檢查類
是否被已載入,檢查順序是自底向上,從
custom classloader 到
bootstrap classloader
逐層檢查,只要某個
classloader
已載入就視為已加
載此類,保證此類
只所有classloader
載入一次。而載入的順序是自頂向下,也就是由上層來逐層嘗試載入此類。
當乙個類收到了類載入請求,他首先不會嘗試自己去載入這個類,而是把這個請求委派給父類去完成,每乙個層次類載入器都是如此,
因此所有的載入請求都應該傳送到啟動類載入其中,只有當父類載入器反饋自己無法完成這個請求的時候(在它的載入路徑下沒有找到
所需載入的class),子類載入器才會嘗試自己去載入。
採用雙親委派的乙個好處是比如載入位於 rt.jar 包中的類 j**a.lang.object,不管
是哪個載入器載入這個類,最終都是委託給頂層的啟動類載入器進行載入,這樣就保證了使用不同的類載入器最終得到的都是同樣乙個
object物件。
JVM相關問題
1.記憶體模型以及分割槽,需要詳細到每個區放什麼。2.堆裡面的分割槽 eden,survival from to,老年代,各自的特點。3.物件建立方法,物件的記憶體分配,物件的訪問定位。4.gc的兩種判定方法 引用計數與引用鏈。5.gc的三種收集方法 標記清除 標記整理 複製演算法的原理與特點,分別...
jvm 相關引數
堆大小設定 jvm 中最大堆大小有三方面限制 相關作業系統的資料模型 32 bt還是64 bit 限制 系統的可用虛擬記憶體限制 系統的可用物理記憶體限制。32位系統下,一般限制在1.5g 2g 64為作業系統對記憶體無限制。我在windows server 2003 系統,3.5g物理記憶體,jd...
jvm知識梳理1
關於記憶體分配 1.jvm的記憶體氛圍堆記憶體和非堆記憶體,重點來說堆記憶體。2.堆記憶體中有兩個地方,乙個是年輕代,即young,乙個是老年代,即old,這兩個區域的大小比例為1 3。3.在年輕代中又分為三個部分,乙個eden 伊甸園 區域,兩個survivor 倖存者 區域,s0和s1,它們的大...