久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

Java知識歸納之JVM詳解

本篇文章給大家?guī)砹岁P(guān)于java的相關(guān)知識,其中主要整理了JVM的相關(guān)問題,包括了JVM內(nèi)存區(qū)域劃分、JVM類加載機制、VM的垃圾回收等等內(nèi)容,下面一起來看一下,希望對大家有幫助。

Java知識歸納之JVM詳解

推薦學(xué)習(xí):《java視頻教程》

一.JVM內(nèi)存區(qū)域劃分

JVM為什么要劃分出這些區(qū)域呢?JVM內(nèi)存是從操作系統(tǒng)里面申請過來的,而JVM就根據(jù)功能需求將這些劃分成了一些小的模塊,這樣一塊大的場地就可以劃分成一些小的模塊,然后每個模塊就負(fù)責(zé)自己的功能就可以了,那接下來看看這些區(qū)域的功能到底是什么呢!

1.程序計數(shù)器

程序計數(shù)器是內(nèi)存中最小的區(qū)域,這里面主要保存了下一條要執(zhí)行的指令的地址在哪里(指令就是字節(jié)碼,一般程序要運行,JVM就需要把字節(jié)碼加載出來放到內(nèi)存中,然后程序再把一條一條的指令從內(nèi)存中取出來放到CPU上去執(zhí)行,所以必須要記住當(dāng)前執(zhí)行到哪一條指令,以及下一條在哪里,因為CPU不是只給一個進程提供服務(wù)的,是給所有的進程都提供服務(wù),是并發(fā)式的執(zhí)行程序的,又因為操作系統(tǒng)是以線程為單位進行調(diào)度執(zhí)行的,所以每個線程都要有自己的執(zhí)行位置,也就是每一個線程都需要有一個程序計數(shù)器來記錄位置!)

2.棧

棧里面存放的主要是局部變量和方法調(diào)用信息,只要涉及到新方法的調(diào)用,就會有"入棧"的操作,每執(zhí)行完成一個方法,就會有"出棧"的操作,而且棧也是每個線程都有一份的
Java知識歸納之JVM詳解
因此對于遞歸來說,一定要控制好遞歸條件,否則很有可能會出現(xiàn)棧溢出(StackOverflowException)異常的!

3.堆

堆是內(nèi)存中空間最大的區(qū)域,而且堆是每個進程只有一份的,進程中的多個線程公用一個堆,里面主要存放著new出來的對象以及對象的成員變量,例如String s = new String()如果在方法里面這里的s就是局部變量是在棧上的,如果這個s是成員變量,就是在堆上的,而后面new String()是對象的本體,對象是在堆上的,這是容易混淆的地方,另外堆還有一個重要的點就是關(guān)于垃圾回收問題,這個后面再詳細(xì)介紹!

4.方法區(qū)

方法區(qū)中存放的是"類對象",平常所寫的.java代碼經(jīng)過編譯器翻譯過后就會變成.class(二進制字節(jié)碼),然后.class就會被加載到內(nèi)存中,也就被JVM構(gòu)造成了類對象(加載的過程就是稱為"類加載"),而這些類對象就會存放到方法區(qū)中,這里面就具體描述了類長啥樣(類的名字,類的成員及其成員名成員類型,類的方法及其方法名方法類型,以及一些指令…另外類對象里面還存放了一個很重要的東西,就是靜態(tài)成員,一般被static修飾的成員就成為了類屬性,而普通的方法被稱為實例屬性,這是有很大差別的)!

上面所介紹的是JVM中比較常見的區(qū)域,而一些JVM的內(nèi)存區(qū)域劃分不一定是符合實際情況的,JVM在實現(xiàn)的過程中區(qū)域的劃分是不盡相同的,不同的廠商不同版本的JVM都是有可能存在差異的,不過對于我們普通的程序員而講,只要不是去實現(xiàn)JVM,那么就不需要了解那么深刻,講上面的幾個常見的區(qū)域加以了解就可以了!


二.JVM類加載機制

類加載其實是設(shè)計一個運行時環(huán)境的一個重要的功核心功能,這是非常重量級的,因此我這里也就簡單介紹一下!
Java知識歸納之JVM詳解
上述就是類加載的具體過程,最后面的Using和Unloading就是使用的過程就不介紹了,就介紹一下前面的三個大的步驟:

1.Loading(加載)

在loading階段就會先找到對應(yīng)的.class文件,然后打開并讀取(根據(jù)字節(jié)流).class文件,同時初步生成一個類對象,這個和完成的類加載(class Loading)是不相同的,不要弄混淆了!
class文件的具體格式(如果要實現(xiàn)一個Java編譯器就得按照這樣的格式來構(gòu)造,實現(xiàn)JVM就得按照這個格式來進行加載!):
Java知識歸納之JVM詳解
觀察這個格式就可以看到.class文件就把.java文件中的核心信息都表述進去了,只不過組織格式上發(fā)生了轉(zhuǎn)變,所以loading環(huán)節(jié)就會把讀取到的信息,初步填寫到類對象中

2.Linking(連接)

連接一般就是建立好多個實體之間的聯(lián)系

2.1.Verification(驗證)

Verification就是一個校驗的過程,主要就是驗證讀到的內(nèi)容是不是和規(guī)范中規(guī)定的格式完全匹配,如果發(fā)現(xiàn)讀到的數(shù)據(jù)格式不符合規(guī)范,就會類加載失敗,并且拋出異常!

2.2.Preparation(準(zhǔn)備)

Preparation階段是正式為定義的變量(靜態(tài)變量,就是static修飾的變量)分配內(nèi)存并設(shè)置類變量初始值的階段,就會給每個靜態(tài)變量分配內(nèi)存,并且設(shè)置為0值!

2.3.Resolution(解析)

Resolution階段是Java虛擬機將常量池內(nèi)的符號引用替換為直接引用的過程,也就是初始化常量的過程,.class文件中常量是集中放置的,每個常量會有一個編號,而在.class文件中的結(jié)構(gòu)體里初始情況就只是記錄的編號,然后就可以根據(jù)這個編號找到對應(yīng)的內(nèi)容,再填充到類對象中!

3.Initialization(初始化)

Initialization階段就是真正的對類對象進行初始化(根據(jù)寫的代碼),尤其是針對靜態(tài)成員

4.典型的面試題

class A {     public A(){         System.out.println("A的構(gòu)造方法");     }     {         System.out.println("A的構(gòu)造代碼塊");     }     static {         System.out.println("A的靜態(tài)代碼塊");     }}class B extends A{     public B(){         System.out.println("B的構(gòu)造方法");     }     {         System.out.println("B的構(gòu)造代碼塊");     }     static {         System.out.println("B的靜態(tài)代碼塊");     }}public class Test extends B{     public static void main(String[] args) {         new Test();         new Test();     }}

可以自己先嘗試寫一下輸出的結(jié)果

做這樣的題就需要把握幾個大的原則:

  • 類加載階段就會進行靜態(tài)代碼塊的執(zhí)行,要想創(chuàng)建實例,勢必要先進行類加載

  • 靜態(tài)代碼塊只是類加載階段執(zhí)行一次,其他階段都不會再執(zhí)行

  • 構(gòu)造方法和構(gòu)造代碼塊每次實例化都會執(zhí)行,而且構(gòu)造代碼塊會在構(gòu)造方法前面執(zhí)行~~

  • 父類執(zhí)行在前,子類執(zhí)行在后!

  • 程序是從main開始執(zhí)行的,main的Test的方法,因此要執(zhí)行main就需要先加載Test類

  • 只有涉及到這個類了,類里面的東西才會被加載

輸出結(jié)果: A的靜態(tài)代碼塊 B的靜態(tài)代碼塊 A的構(gòu)造代碼塊 A的構(gòu)造方法 B的構(gòu)造代碼塊 B的構(gòu)造方法 A的構(gòu)造代碼塊 A的構(gòu)造方法 B的構(gòu)造代碼塊 B的構(gòu)造方法

5.雙親委派模型

這個東西是類加載中的一個環(huán)節(jié),處于Loading階段(比較靠前的部分),雙親委派模型描述的就是JVM中的類加載器,如何根據(jù)類的全限定名(java.lang.String)找到.class文件的過程。這里的類加載器是JVM專門提供的對象,主要負(fù)責(zé)進行類加載,所以找文件的過程也是由類加載器來負(fù)責(zé)的,.class文件可能放置的位置有很多,有的要放到JDK目錄里面,有的放到項目目錄里面,還有的在其他特定的位置里面,因此JVM提供了多個類加載器,每個類加載器負(fù)責(zé)一個片區(qū),而默認(rèn)的類加載器主要有3個:

  • BootStrapClassLoader:負(fù)責(zé)加載標(biāo)準(zhǔn)庫中的類(String,ArrayList,Random,Scanner…)

  • ExtensionClassLoader:負(fù)責(zé)加載JDK擴展的類(現(xiàn)在很少用到)

  • ApplicationClassLoader:負(fù)責(zé)加載當(dāng)前項目目錄中的類

  • 另外程序員還可以自定義類加載器,來加載其他目錄中的類,Tomcat就自定義了類加載器,用來專門加載webapps里面的.class

雙親委派模型就描述了這個找目錄的過程,也就是上述類加載器是如何配合的
考慮找一下java.lang.String:

  • 程序啟動,就會先進入ApplicationClassLoader類加載器

  • ApplicationClassLoader類加載器就會檢查下,它的父加載器是否已經(jīng)加載過了,如果沒有,就調(diào)用父 類加載器ExtensionClassLoader

  • ExtensionClassLoader類加載器就會檢查下,它的父加載器是否已經(jīng)加載過了,如果沒有,就調(diào)用父 類加載器BootStrapClassLoader

  • BootStrapClassLoader類加載器也會檢查下,它的父加載器是否已經(jīng)加載過了,然后發(fā)現(xiàn)沒有父親,于是就掃描自己負(fù)責(zé)的目錄

  • 然后java.lang.String這個類就在標(biāo)準(zhǔn)庫中能找到,然后后續(xù)就由BootStrapClassLoader加載器負(fù)責(zé)后續(xù)的加載過程,查找環(huán)節(jié)就結(jié)束了!
    Java知識歸納之JVM詳解

考慮找一下自己寫的Test類:

  • 程序啟動,就會先進入ApplicationClassLoader類加載器

  • ApplicationClassLoader類加載器就會檢查下,它的父加載器是否已經(jīng)加載過了,如果沒有,就調(diào)用父 類加載器ExtensionClassLoader

  • ExtensionClassLoader類加載器就會檢查下,它的父加載器是否已經(jīng)加載過了,如果沒有,就調(diào)用父 類加載器BootStrapClassLoader

  • BootStrapClassLoader類加載器也會檢查下,它的父加載器是否已經(jīng)加載過了,然后發(fā)現(xiàn)沒有父親,于是就掃描自己負(fù)責(zé)的目錄,沒掃描到,就會回到子加載器中繼續(xù)掃描

  • ExtensionClassLoader掃描自己負(fù)責(zé)的目錄,也沒有掃描到,再回到子加載器中繼續(xù)掃描

  • ApplicationClassLoader也掃描自己負(fù)責(zé)的目錄,自己寫的類就在自己的項目目錄下,因此就能找到,然后后續(xù)的類加載就由ApplicationClassLoad完成,此時查找目錄的環(huán)節(jié)就結(jié)束了~~(另外如果ApplicationClassLoader也沒有找到們就會拋出ClassNotFoundException異常)
    Java知識歸納之JVM詳解

這一套查找規(guī)則就稱為雙親委派模型,那為啥JVM要這樣設(shè)計呢,理由就是一旦程序員自己寫的類和全限定類名重復(fù)了,也能夠成功加載標(biāo)準(zhǔn)庫中的類,而不是自己寫的類!!!
另外如果是自定義的類加載器,要不要遵守這個雙親委派模型呢?
答案是可以遵守也可以不遵守,主要看需求,例如Tomcat加載webapp中的類,就沒有遵守,因為遵守了上面的類加載器也是不可能找到的!

三.JVM的垃圾回收

JVM中的垃圾回收機制(GC),一般在寫代碼的時候,經(jīng)常就會涉及到申請內(nèi)存,例如創(chuàng)建一個變量,new一個對象,調(diào)用一個方法,加載類…而申請內(nèi)存的時機一般是明確的(需要保存某個或某些數(shù)據(jù)就需要申請內(nèi)存),但是釋放內(nèi)存的時機,卻是不那么清楚的,釋放的早了也不行(如果還是要使用的,結(jié)果已經(jīng)被釋放了這就讓其無內(nèi)存可用了,就讓這些數(shù)據(jù)"無處可去"),釋放的晚了也不行(釋放晚了,大量的囤積很有可能讓可用內(nèi)存逐漸變少,很有可能會出現(xiàn)內(nèi)存泄漏問題,就是無內(nèi)存可以使用),因此內(nèi)存的釋放要恰到好處才好!
而垃圾回收的本職是靠運行時環(huán)境額外做了很多的工作來完成釋放內(nèi)存操作的,這讓程序員的心智負(fù)擔(dān)大大降低了,但是垃圾回收也是有劣勢的:①消耗額外的開銷(消耗資源耕

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产精品一线| 国产suv精品一区| 日韩成人亚洲| 亚洲伊人av| 99久久99久久精品国产片果冰 | 午夜一级久久| 伊人影院久久| 亚洲一区二区日韩| 在线一区欧美| 欧美日韩少妇| 蜜桃伊人久久| 日本在线成人| 国产超碰精品| 韩日一区二区三区| 久久午夜视频| 欧美中文高清| 精品视频在线你懂得| 国产精品成人自拍| 中文av在线全新| 亚洲天堂黄色| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚州国产精品| 九九九精品视频| 另类中文字幕国产精品| 91精品一区二区三区综合| 99视频精品| 欧美一区在线观看视频| 中文字幕在线免费观看视频| 亚洲夜间福利| 日韩精品亚洲专区| 国产专区精品| 午夜精品婷婷| 青草av.久久免费一区| 久久中文字幕一区二区三区| 欧美综合另类| 青青国产91久久久久久| 精品国产亚洲一区二区在线观看| 日韩精品看片| 日韩一区二区三区免费视频| 国产日韩欧美三区| 日韩高清不卡| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久国产日韩欧美精品| 精品一区二区三区四区五区| 欧美一级精品| 国产欧美一级| 日韩欧美激情电影| 国产精品成人一区二区不卡| 午夜在线视频观看日韩17c| 国产精品亚洲四区在线观看| 正在播放日韩精品| 亚洲精品福利| 久久久五月天| 婷婷成人av| 日韩国产综合| 日韩高清成人在线| 群体交乱之放荡娇妻一区二区| 亚洲久久在线| 欧洲精品一区二区三区| 日韩精品一区二区三区av| 欧洲一级精品| 国产欧美一区二区三区精品观看| 欧美日韩一二三四| 国产日韩欧美一区| 在线亚洲自拍| 成人在线黄色| 日日夜夜免费精品视频| 久久精品欧美一区| 国产精品99久久免费| 亚洲神马久久| 日韩久久视频| 国产剧情一区| 国产精品久久久久久久久妇女| 亚洲一区导航| 99久久精品费精品国产| 国产精品99久久久久久董美香| 伊人久久婷婷| 日韩国产一区二区三区| 国产精品sm| 日韩精品中文字幕一区二区| 久久久精品五月天| 久久亚洲人体| 日韩免费精品| 亚洲免费影院| 999精品在线| 精品欧美日韩精品| 日本午夜精品| 蜜桃视频一区二区三区在线观看| 色88888久久久久久影院| 欧美精品99| 日韩高清欧美激情| 综合激情婷婷| 久久国产精品毛片| 免费视频一区三区| 日韩一区二区三区在线免费观看| 国产福利一区二区三区在线播放| 亚洲专区视频| 丝袜美腿亚洲色图| 不卡中文字幕| 99久久精品费精品国产| 最近高清中文在线字幕在线观看1| 国产精品**亚洲精品| 日本午夜精品| 久久精品97| 国产亚洲精aa在线看| 日韩一区二区三区精品| 亚洲视频国产| 丝袜a∨在线一区二区三区不卡| 九九综合在线| 红桃视频国产精品| 亚洲91精品| 久久麻豆精品| 91精品婷婷色在线观看| 成人羞羞视频播放网站| 韩国精品主播一区二区在线观看| 岛国av在线网站| 精品视频在线你懂得| 麻豆久久久久久| 精品久久久网| 日韩理论视频| 精品三级久久| 亚洲午夜电影| 尹人成人综合网| 日韩视频中文| 麻豆久久精品| 婷婷五月色综合香五月| 日韩精品一区二区三区免费视频| 日本一不卡视频| 国产日韩中文在线中文字幕| 91九色综合| 久久亚洲精精品中文字幕| 久久久久久亚洲精品美女| 国产一区二区精品久| 欧美日韩国产观看视频| 色网在线免费观看| 91精品国产乱码久久久久久久| 99热精品久久| 香蕉久久久久久久av网站| 亚洲精品看片| 国产精品videossex| 精品一区二区三区中文字幕在线| 中文字幕高清在线播放| 九九久久电影| 亚洲免费毛片| 麻豆精品一区二区综合av| 国产精品99一区二区三| 亚洲www啪成人一区二区| 红桃视频欧美| 日韩精彩视频在线观看| 国产精品porn| 香蕉视频亚洲一级| 国产精品毛片在线看| 亚洲精品乱码久久久久久蜜桃麻豆 | 日韩不卡一区二区| 国产精品xxx在线观看| 91视频一区| 最新国产拍偷乱拍精品| 日韩精品中文字幕一区二区| 丁香婷婷久久| 欧美午夜不卡影院在线观看完整版免费| 亚洲一区二区免费在线观看| 国产精品免费99久久久| av在线资源| 亚洲丝袜美腿一区| 美女精品久久| 欧洲激情综合| 91嫩草精品| 国产99久久| 欧美另类中文字幕| 成人看片网站| 日韩和欧美一区二区三区| 国产a久久精品一区二区三区| aa亚洲婷婷| 老牛国内精品亚洲成av人片| 激情综合亚洲| 国产探花在线精品| 九九久久电影| 欧美天堂一区| 91精品一区国产高清在线gif| 亚洲人成亚洲精品| 成人在线丰满少妇av| 久久电影一区| 国产一区二区三区四区| 国产精品三上| 国语精品一区| 亚洲精品欧美| 99久久久久国产精品| 日本欧美一区| 激情婷婷亚洲| 久久精品女人| 日欧美一区二区| 久久精品国产大片免费观看| 欧美日韩国产一区二区在线观看| 亚洲二区视频| 国产精品网站在线看| 亚洲黑丝一区二区| 精品网站999| 日韩一区二区三区四区五区| 久久国产亚洲| 老牛国内精品亚洲成av人片|