大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 編程基礎(chǔ),Java虛擬機(jī)和內(nèi)存優(yōu)化總結(jié)

編程基礎(chǔ),Java虛擬機(jī)和內(nèi)存優(yōu)化總結(jié)

更新時(shí)間:2020-06-19 13:14:09 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2637次

Java的整體運(yùn)行結(jié)構(gòu)和jvm的關(guān)系做個(gè)梳理,但是不再用大篇幅的文字?jǐn)⑹龅膬?nèi)容,這樣不容易記憶,而且容易產(chǎn)生厭看的情緒。所以小編決定使用采用繪圖+少部分文字描述為主。

一、弄明白Java的整體運(yùn)行結(jié)構(gòu)與jvm的關(guān)系

1.Jvm是什么?

Java虛擬機(jī)(英語(yǔ):Java Virtual Machine,縮寫為JVM),一種能夠運(yùn)行Java bytecode的虛擬機(jī),以堆棧結(jié)構(gòu)機(jī)器來(lái)進(jìn)行實(shí)做。最早由太陽(yáng)微系統(tǒng)所研發(fā)并實(shí)現(xiàn)第一個(gè)實(shí)現(xiàn)版本,是Java平臺(tái)的一部分,能夠運(yùn)行以Java語(yǔ)言寫作的軟件程序Java虛擬機(jī)有自己完善的硬體架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。JVM屏蔽了與具體操作系統(tǒng)平臺(tái)相關(guān)的信息,使得Java程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼-字節(jié)碼,就可以在多種平臺(tái)上不加修改地運(yùn)行。通過(guò)對(duì)中央處理器CPU所執(zhí)行的軟件實(shí)現(xiàn),實(shí)現(xiàn)能執(zhí)行編譯過(guò)的Java程序碼與應(yīng)用程序)。

作為一種編程語(yǔ)言的虛擬機(jī),實(shí)際上不只是專用于Java語(yǔ)言,只要生成的編譯文件匹配JVM對(duì)加載編譯文件格式要求,任何語(yǔ)言都可以由JVM編譯運(yùn)行。此外,除了甲骨文,也有其他開源或閉源的實(shí)現(xiàn)。--摘自維基百科

2.java運(yùn)行過(guò)程與jvm關(guān)系

編程基礎(chǔ),Java虛擬機(jī)和內(nèi)存優(yōu)化總結(jié)

上圖能夠清晰的展示我們從新編譯一個(gè)java類到j(luò)vm中執(zhí)行的全部流程,

對(duì)堆棧等地方的功能做一個(gè)解釋:

堆:java的引用傳遞實(shí)現(xiàn),依靠的就是堆內(nèi)存,同一塊堆內(nèi)存可以被不同的棧內(nèi)存所指向;

棧:程序運(yùn)行的單位,里面存儲(chǔ)的信息都與當(dāng)前的線程有關(guān)系,包括局部變量,程序的運(yùn)行狀態(tài),方法返回值等;

方法區(qū):在進(jìn)行遞歸調(diào)用時(shí),所保存的堆棧內(nèi)容,它由局部變量表,操作數(shù)棧,當(dāng)前方法所屬的類的運(yùn)行時(shí)常量的引用,返回地址等;

程序計(jì)數(shù)器:一塊非常小的內(nèi)存空間,主要用來(lái)做一個(gè)計(jì)數(shù)操作,對(duì)象的晉升問題(關(guān)系到垃圾回收(GC)).

二、堆內(nèi)存組織結(jié)構(gòu)以及與內(nèi)存有關(guān)的參數(shù)設(shè)置(優(yōu)化)

在整個(gè)jvm運(yùn)行時(shí)數(shù)據(jù)區(qū),要對(duì)jvm進(jìn)行優(yōu)化,那么堆內(nèi)存是重點(diǎn)優(yōu)化對(duì)象。原因是棧本身所占的內(nèi)存比率很小,而java中所有new對(duì)象全部放在堆內(nèi)存區(qū)域。那么對(duì)這些對(duì)象的回收控制策略就非常重要。

1.堆內(nèi)存的內(nèi)部結(jié)構(gòu)

編程基礎(chǔ),Java虛擬機(jī)和內(nèi)存優(yōu)化總結(jié)

上圖展示了堆內(nèi)存的內(nèi)部結(jié)構(gòu),值得注意的是,在1.8之前和之后,java的永久代被取消,被元空間所代替(元空間就是電腦本省的物理內(nèi)存),下面對(duì)各個(gè)區(qū)的作用做簡(jiǎn)單的解釋:

年輕代:

Eden區(qū):新生的小對(duì)象,每當(dāng)使用關(guān)鍵字new的時(shí)候,默認(rèn)都會(huì)在此空間進(jìn)行對(duì)象創(chuàng)建,如果創(chuàng)建的對(duì)象過(guò)多,那么最終的的結(jié)果就是Eden區(qū)的空間爆滿,此時(shí)會(huì)發(fā)生晉級(jí)操作(在經(jīng)歷若干次minorGC后還保留的對(duì)象,晉升到存活區(qū));

存活區(qū):minorGC存活的對(duì)象保存的區(qū)域,存活區(qū)有兩塊空間S0和S1,有一塊始終為空,該區(qū)域保存對(duì)象向老年代晉升(停止-復(fù)制算法);

老年代:經(jīng)歷了數(shù)次GC之后還保留的對(duì)象,這些對(duì)象經(jīng)歷了多次GC仍然存活,但是也有可能在接下來(lái)的某一次被清除掉,同時(shí)要注意,假如是new一個(gè)很大的對(duì)象,那么是直接保存到老年代來(lái),如果老年代空間不夠了,會(huì)出現(xiàn)MajorGC(FullGC)進(jìn)行老年代的清理,非常耗費(fèi)性能(不建議使用system.gc()的原因);

在發(fā)生MajorGC的時(shí)候,jvm會(huì)檢查每次晉升入老年代的對(duì)象的大小是否大于老年代剩余空間的大小,若大于,直接觸發(fā)一次FullGC,否則可以自定義是否允許擔(dān)保失敗(關(guān)鍵字設(shè)置:XX:+HandlePromotionFailure)(標(biāo)記-清理算法);

元空間(永久代):jdk1.8之后,取消了永久代,變成了元空間,不再在堆內(nèi)存里面保存類,字符串常量等,采用了元空間之后,不會(huì)再出現(xiàn)堆溢出的異常。

2.重要參數(shù)

通過(guò)調(diào)整jvm的相關(guān)參數(shù),可以優(yōu)化堆內(nèi)存,提高jvm的運(yùn)行效率,下面對(duì)幾個(gè)重要參數(shù)做一下總結(jié):

-Xms:設(shè)置初始化的內(nèi)存分配大小,,默認(rèn)采用的大小為物理大小的1/64;

-Xmx:設(shè)置最大的內(nèi)存可用空間,,默認(rèn)采用的大小為物理大小的1/4;

-Xmn:設(shè)置年輕代大小,默認(rèn)采用的大小為物理大小的1/64;

-Xss:設(shè)置每一個(gè)線程所占用的棧的大小

三、GC算法

在jdk1.7之后,正式發(fā)布了G1回收算法;

在此之前,GC算法的發(fā)展進(jìn)程如下:

Serial(串行)收集器

在jdk1.3.1之前,java虛擬機(jī)僅僅能使用Serial收集器。Serial收集器是一個(gè)單線程的收集器,但它的“單線程”的意義并不僅僅是說(shuō)明它只會(huì)使用一個(gè)CPU或一條收集線程去完成垃圾收集工作,更重要的是在它進(jìn)行垃圾收集時(shí),必須暫停其他所有的工作線程,直到它收集結(jié)束。

Parallel(并行)收集器

Parallel收集器也稱吞吐量收集器,相比Serial收集器,Parallel最主要的優(yōu)勢(shì)在于使用多線程去完成垃圾清理工作,這樣可以充分利用多核的特性,大幅降低gc時(shí)間。

CMS(并發(fā))收集器

CMS收集器在Minor GC時(shí)會(huì)暫停所有的應(yīng)用線程,并以多線程的方式進(jìn)行垃圾回收。在Full GC時(shí)不再暫停應(yīng)用線程,而是使用若干個(gè)后臺(tái)線程定期的對(duì)老年代空間進(jìn)行掃描,及時(shí)回收其中不再使用的對(duì)象。

G1(并發(fā))收集器

G1收集器(或者垃圾優(yōu)先收集器)的設(shè)計(jì)初衷是為了盡量縮短處理超大堆(大于4GB)時(shí)產(chǎn)生的停頓。相對(duì)于CMS的優(yōu)勢(shì)而言是內(nèi)存碎片的產(chǎn)生率大大降低

編程基礎(chǔ),Java虛擬機(jī)和內(nèi)存優(yōu)化總結(jié)

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“編程基礎(chǔ),Java虛擬機(jī)和內(nèi)存優(yōu)化總結(jié)”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日本一级毛片aaaaa | 一区二区中文字幕在线观看 | 久久精品国产亚洲a不卡 | 日本a中文字幕 | 成人在线毛片 | 国产精品日韩一区二区三区 | a级毛片免费 | 国产精品露脸张开双腿 | 亚洲国产精品aa在线看 | 黄色网址亚洲 | 嫩操影院| 在线 中文字幕 日韩 欧美 | 日本中文字幕有码 | 国产色网 | 精品一区二区三区在线播放 | av97色噜噜狠狠 | 九九久久精品这里久久网 | 国产免费精彩视频 | 99re6在线视频免费精品 | 日韩中文在线观看 | 黄色在线免费 | 国产在线自在拍91精品黑人 | 波多野结衣在线观看3人 | 操网址| 农村苗族一级特黄a大片 | 亚洲性一区| 久久国产一片免费观看 | 色综合久久久久综合体桃花网 | 精品伊人久久久久7777人 | 亚洲综色| 精品久久久久久国产免费了 | 欧美成人xxxxxxxx在线 | 成人网视频在线观看免费 | 中文字幕亚洲欧美 | 香蕉在线网站 | 久久www免费人成看国产片 | 免费在线毛片 | 日韩在线手机看片免费看 | 美日韩视频 | 亚洲香蕉久久一区二区三区四区 | 一区二区3区免费视频 |