国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

如何做教育網(wǎng)站點金推廣優(yōu)化公司

如何做教育網(wǎng)站,點金推廣優(yōu)化公司,韶關(guān)網(wǎng)站建設(shè)價格,信息產(chǎn)業(yè)部網(wǎng)站備案查詢?博主主頁: 33的博客? ??文章專欄分類:JavaEE?? 🚚我的代碼倉庫: 33的代碼倉庫🚚 🫵🫵🫵關(guān)注我?guī)懔私飧噙M階知識 目錄 1.前言2.JVM內(nèi)存區(qū)域劃分3.類加載3.1雙親委派模型 4.垃圾回收(GC&#xff0…

?博主主頁: 33的博客?
??文章專欄分類:JavaEE??
🚚我的代碼倉庫: 33的代碼倉庫🚚
🫵🫵🫵關(guān)注我?guī)懔私飧噙M階知識

在這里插入圖片描述

目錄

  • 1.前言
  • 2.JVM內(nèi)存區(qū)域劃分
  • 3.類加載
    • 3.1雙親委派模型
  • 4.垃圾回收(GC)
    • 4.1垃圾識別
      • 4.1.1引用計數(shù)
    • 4.1.2可達(dá)性分析
    • 4.2垃圾釋放
    • 4.2.1標(biāo)記釋放
    • 4.2.2復(fù)制算法
    • 4.2.3標(biāo)記整理
    • 4.2.4分代回收
  • 5.總結(jié)

1.前言

JVM 是 Java Virtual Machine 的簡稱,意為 Java虛擬機。虛擬機是指通過軟件模擬的具有完整硬件功能的、運行在一個完全隔離的環(huán)境中的完整計算機系統(tǒng),JVM本省是一個比較復(fù)雜的東西,我主要從三個方面進行講述:內(nèi)存區(qū)域劃分,類加載機制垃圾回收算法。

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

JVM其實就是一個進程,進程在運行過程中,要從操作系統(tǒng)申請資源空間,JVM申請的空間會劃分為幾個不同的區(qū)域,每個區(qū)域作用各不相同。這些資源支持了后續(xù)Java程序的執(zhí)行。
在這里插入圖片描述
堆區(qū):整個進程只有一份,代碼中new出來的對象,對象中的非靜態(tài)成員變量,放在堆區(qū)
棧區(qū):虛擬機棧記錄了JAVA代碼中的調(diào)用關(guān)系,java局部變量。
程序計數(shù)器:專門用來存儲下一條Java指令的地址
元數(shù)據(jù):整個進程只有一份,一些輔助性質(zhì)的,描述性質(zhì)的屬性,我們所寫的JAVA代碼,各種邏輯運算,會通過javac完成代碼轉(zhuǎn)換成字節(jié)碼,此時這些字節(jié)碼在程序運行時就會被JVM加載到元數(shù)據(jù)中,此時當(dāng)前程序如何執(zhí)行,做哪些事就按照上述元數(shù)據(jù)區(qū)記錄的字節(jié)執(zhí)行。
下列元素n,m,t各在什么區(qū)?

class Test{
int n;
static int m;
}
main(){
Test t=new Test();
}

t為局部變量在棧區(qū)
new Test在堆區(qū)
n是成員變量也在堆中
m是static修飾,類屬性在元數(shù)據(jù)區(qū)

3.類加載

類加載就是指JAVA程序運行是,把.class文件從硬盤中讀到內(nèi)存,再進行一系列解析。
類加載大致可以分為5步:
1)加載
把硬盤上的.class文件找到,打開文件讀取文件內(nèi)容
2)驗證
確保讀到的文件內(nèi)容是合法的
3)準(zhǔn)備
給類申請內(nèi)存空間,默認(rèn)值為全0
4)解析
主要針對類中的字符串常量進行處理
例如有一串代碼為String s=”hello";s變量存入的是hello的地址,但是再.calss文件中不純在地址的概率,那么為了就可以給s填一個偏移量。
在這里插入圖片描述

5)初始化
把類對象的各個部分的屬性進行賦值填充

3.1雙親委派模型

在類加載的時候有一個重要模型就是雙親委派模型,描述了如何找到.class文件。在進行加載操作的時候有一個專門的模塊叫做類加載器,默認(rèn)含有三個
BootstrapClassLoader:負(fù)責(zé)查找標(biāo)準(zhǔn)庫的目錄
ExtensionClassLoader:負(fù)責(zé)查找擴展庫的目錄
ApplicationClassLoader:負(fù)責(zé)查找當(dāng)前項目的代碼目錄,第三方庫目錄
上述三個類加載器存在父子關(guān)系,類似于二叉樹,有一個指針指向父類加載器
在這里插入圖片描述
雙親委派工作流程:
1)從ApplicationClassLoader作為入口,開始工作
2)ApplicationClassLoader不會立即搜索自己負(fù)責(zé)的目錄,會把搜索的任務(wù)交給自己的父親
3)進入ExtensionClassLoader,也不會立即搜索自己負(fù)責(zé)的目錄,也會把搜索的任務(wù)交給自己的父親
4)進入BootstrapClassLoader,不會立即搜索自己負(fù)責(zé)的目錄,也會把搜索的任務(wù)交給自己的父親
5)BootstrapClassLoader發(fā)現(xiàn)自己沒有父親節(jié)點,此時會真正的搜索負(fù)責(zé)的目錄,如果找到了就執(zhí)行后續(xù)操作,沒有找到就返回給孩子
6)ExtensionClassLoader收到父親的任務(wù)以后,會搜索自己負(fù)責(zé)的目錄,如果找到了就執(zhí)行后續(xù)操作,沒有找到就返回給孩子
7)ApplicationClassLoader收到父親的任務(wù)以后,會搜索自己負(fù)責(zé)的目錄,如果找到了就執(zhí)行后續(xù)操作,沒有找到就返回給孩子,但如果沒有孩子就說明類加載失敗,拋出ClassNotFoundException

4.垃圾回收(GC)

垃圾回收是回收的內(nèi)存,其中主要回收的是堆中的內(nèi)存,棧中的內(nèi)存在代碼塊結(jié)束以后會自動銷毀。那么垃圾回收具體是怎么展開的呢?主要分為垃圾識別和垃圾釋放

4.1垃圾識別

判定new出來的對象在后續(xù)是否要使用,如果不再使用舊標(biāo)記為垃圾。
例:

void func(){
Test t=new Test();
t.find();
}

當(dāng)程序執(zhí)行到}時,t就被釋放,此后就不再使用new Test()對象了,就可以標(biāo)記為垃圾,但如果有些大媽比較復(fù)雜,例如

Test t=new Test();
Test m=t;
Test n=m;
Test z=n;

此時就有很多引用指向new Test()對象,就學(xué)要確保沒有任何一個引用指向這個對象才能標(biāo)記為垃圾,那么我們怎么知道什么時候沒有引用指向它呢?

4.1.1引用計數(shù)

當(dāng)我們創(chuàng)建一個對象時,給每個對象分配一個額外的空間記錄當(dāng)前對象有幾個引用。
在這里插入圖片描述
每增加一個引用,計數(shù)位置+1,每減少一個引用,技術(shù)位置-1,如果為0就標(biāo)記為垃圾
問題一
這樣會消耗額外的空間,當(dāng)我們的對象非常多,但對象的體積非常小,那么久可能導(dǎo)致計數(shù)所占的空間就占了所有空間的大部分。
問題二
可能會引起循環(huán)引用,那么就永遠(yuǎn)釋放不了資源

class Test{
Test t;
}
Test a=new Test();
Test b=new Test();
a.t=b;
b.t=a;
a=null;
b=null;

在這里插入圖片描述
這倆對象不能再使用也釋放不了

4.1.2可達(dá)性分析

在寫代碼的時候會定義很多變量,就可以從這些變量作為起點開始遍歷,所謂的遍歷就是會沿著這些變量的引用類型成員再京一部訪問,所有能被訪問到的自然不是垃圾
在這里插入圖片描述

4.2垃圾釋放

4.2.1標(biāo)記釋放

最直接的方法就是把標(biāo)記為垃圾的直接釋放掉:但是這樣會生成很多內(nèi)存碎片,后續(xù)如果有類對象再申請空間可能就不夠用
在這里插入圖片描述

4.2.2復(fù)制算法

把一個空間分成兩半,假設(shè)數(shù)據(jù)存放于左半邊那么把不是垃圾的數(shù)據(jù)全部賦值到右半再講左半數(shù)據(jù)全部釋放掉。
灰色為垃圾標(biāo)記,數(shù)字為數(shù)據(jù)
在這里插入圖片描述
在這里插入圖片描述
這樣總的內(nèi)存空間減少,且復(fù)制的開銷也很大。

4.2.3標(biāo)記整理

在這里插入圖片描述
在這里插入圖片描述
該方案是把所有的數(shù)據(jù)依次向前搬運,覆蓋掉垃圾區(qū),再把剩下的垃圾進行釋放。
雖然這樣能解決內(nèi)存碎片的問題,但搬運的內(nèi)存開銷很大

4.2.4分代回收

JVM中有專門的線程負(fù)責(zé)周期性掃描,一個對象如果被掃描了一次,年齡就+1,JVM會根據(jù)對象年齡的差異,把整個堆分成2部分,新生代,老年代。
在這里插入圖片描述
1)當(dāng)代碼中new出一個新的對象,這個對象就是被創(chuàng)建在伊甸區(qū),伊甸區(qū)的對象大部分都活不夠第一輪,生命周期非常短
2)第一輪GC掃描完成以后,少數(shù)伊甸區(qū)幸存的對象會通過復(fù)制算法拷貝到生存區(qū),在后續(xù)GC掃描的時候不僅會掃描伊甸區(qū)還會掃描生存區(qū)的對象,生存區(qū)的大多數(shù)對象也會在掃描中被標(biāo)記為垃圾,少數(shù)存活,就會繼續(xù)通過復(fù)制算法拷貝到另一個生存區(qū),每次經(jīng)歷一輪GC年齡就+1.
3)如果這個對象在生存區(qū)中經(jīng)歷了若干輪依然在,那么就會把這個對象拷貝到老年區(qū)。
4)老年代的對象也會被GC掃描只是頻次大大減小
5)對象在老年代結(jié)束以后就會釋放內(nèi)存。

5.總結(jié)

本篇文章主要JVM內(nèi)存區(qū)域劃分,類加載,雙親委派模型,垃圾識別,引用計數(shù),可達(dá)性分析,垃圾釋放,分代回收等等。

下期預(yù)告:MySQL

http://m.aloenet.com.cn/news/33825.html

相關(guān)文章:

  • 株洲做網(wǎng)站優(yōu)化深圳谷歌推廣公司
  • 上下滾屏網(wǎng)站模板電商數(shù)據(jù)查詢平臺
  • 有關(guān)做甜點的網(wǎng)站公司網(wǎng)站制作費用
  • ps做網(wǎng)站登陸界面建站公司
  • 電子商務(wù)的網(wǎng)站建設(shè)分析網(wǎng)絡(luò)營銷的特點不包括
  • 免費做網(wǎng)站模板在哪里做營銷公司排名
  • 百度 新網(wǎng)站 重定向過多成都seo學(xué)徒
  • 網(wǎng)站改版需要多少錢網(wǎng)頁設(shè)計參考網(wǎng)站
  • 幫人做網(wǎng)站的公司嗶哩嗶哩推廣網(wǎng)站
  • c做的網(wǎng)站購物網(wǎng)站
  • 臨西網(wǎng)站建設(shè)住房和城鄉(xiāng)建設(shè)部官網(wǎng)
  • 電子商務(wù)的網(wǎng)站怎么做谷歌google中文登錄入口
  • 免費網(wǎng)站建設(shè)公司推薦跨境電商平臺注冊開店流程
  • 網(wǎng)站開發(fā)教程免費成功營銷案例分享
  • 網(wǎng)站建設(shè)公司有多少家百度上怎么免費開店
  • 網(wǎng)站國外推廣淘寶店鋪如何推廣
  • 西寧微網(wǎng)站建設(shè)多少錢各大網(wǎng)站提交入口
  • 深圳疫情防控形勢seo技術(shù)培訓(xùn)寧波
  • 做水果蔬菜生意網(wǎng)站鄭州網(wǎng)站優(yōu)化推廣
  • 公司企業(yè)網(wǎng)站制作教程最佳磁力引擎吧
  • 桔子建站是什么平臺國外新聞最新消息
  • 萬網(wǎng)域名備案網(wǎng)站網(wǎng)推拉新app推廣平臺
  • 做自媒體可以參考的外國網(wǎng)站軟件開發(fā)需要學(xué)什么
  • 南寧網(wǎng)站備案域名查詢seo
  • 小說網(wǎng)站自動采集圖片百度搜索
  • 免費網(wǎng)站管理軟件seo整站優(yōu)化更能準(zhǔn)確獲得客戶
  • 宣傳冊設(shè)計及網(wǎng)站建設(shè)福建seo
  • idc網(wǎng)站模版營銷戰(zhàn)略有哪些內(nèi)容
  • 房地產(chǎn)電子商務(wù)的網(wǎng)站建設(shè)網(wǎng)頁做推廣
  • 網(wǎng)站如何創(chuàng)建全網(wǎng)營銷