掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:Java架構(gòu)人生 2019-07-10 15:15:23
云計(jì)算
虛擬化 虛擬機(jī):指以軟件的方式模擬具有完整硬件系統(tǒng)功能、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng) ,是物理機(jī)的軟件實(shí)現(xiàn)。常用的虛擬機(jī)有VMWare,Visual Box,Java Virtual Machine(Java虛擬機(jī),簡(jiǎn)稱(chēng)JVM)。

概念
虛擬機(jī):指以軟件的方式模擬具有完整硬件系統(tǒng)功能、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng) ,是物理機(jī)的軟件實(shí)現(xiàn)。常用的虛擬機(jī)有VMWare,Visual Box,Java Virtual Machine(Java虛擬機(jī),簡(jiǎn)稱(chēng)JVM)。
Java虛擬機(jī)陣營(yíng):Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…
啟動(dòng)流程
基本架構(gòu)
Java運(yùn)行時(shí)編譯源碼(.java)成字節(jié)碼,由jre運(yùn)行。jre由java虛擬機(jī)(jvm)實(shí)現(xiàn)。Jvm分析字節(jié)碼,后解釋并執(zhí)行。
JVM由三個(gè)主要的子系統(tǒng)構(gòu)成:
垃圾收集(GC:Garbage Collection)
1.如何識(shí)別垃圾,判定對(duì)象是否可被回收?
2.Java 中的堆是 GC 收集垃圾的主要區(qū)域,GC 分為兩種:Minor GC、Full GC ( 或稱(chēng)為 Major GC )。
GC算法
按照回收策略劃分為:標(biāo)記-清除算法,標(biāo)記-整理算法,復(fù)制算法。
1.標(biāo)記-清除算法:分為兩階段“標(biāo)記”和“清除”。首先標(biāo)記出哪些對(duì)象可被回收,在標(biāo)記完成之后統(tǒng)一回收所有被標(biāo)記的對(duì)象所占用的內(nèi)存空間。不足之處:1.無(wú)法處理循環(huán)引用的問(wèn)題2.效率不高3.產(chǎn)生大量?jī)?nèi)存碎片(ps:空間碎片太多可能會(huì)導(dǎo)致以后在分配大對(duì)象的時(shí)候而無(wú)法申請(qǐng)到足夠的連續(xù)內(nèi)存空間,導(dǎo)致提前觸發(fā)新一輪gc)
2.標(biāo)記-整理算法:分為兩階段“標(biāo)記”和“整理”。首先標(biāo)記出哪些對(duì)象可被回收,在標(biāo)記完成后,將對(duì)象向一端移動(dòng),然后直接清理掉邊界以外的內(nèi)存。
3.復(fù)制算法:把內(nèi)存空間劃為兩個(gè)相等的區(qū)域,每次只使用其中一個(gè)區(qū)域。gc時(shí)遍歷當(dāng)前使用區(qū)域,把正在使用中的對(duì)象復(fù)制到另外一個(gè)區(qū)域中。算法每次只處理正在使用中的對(duì)象,因此復(fù)制成本比較小,同時(shí)復(fù)制過(guò)去以后還能進(jìn)行相應(yīng)的內(nèi)存整理,不會(huì)出現(xiàn)“碎片”問(wèn)題。不足之處:1.內(nèi)存利用率問(wèn)題2.在對(duì)象存活率較高時(shí),其效率會(huì)變低。
按分區(qū)對(duì)待可分為:增量收集算法,分代收集算法
1.增量收集:實(shí)時(shí)垃圾回收算法,即:在應(yīng)用進(jìn)行的同時(shí)進(jìn)行垃圾回收,理論上可以解決傳統(tǒng)分代方式帶來(lái)的問(wèn)題。增量收集把對(duì)堆空間劃分成一系列內(nèi)存塊,使用時(shí)先使用其中一部分,垃圾收集時(shí)把之前用掉的部分中的存活對(duì)象再放到后面沒(méi)有用的空間中,這樣可以實(shí)現(xiàn)一直邊使用邊收集的效果,避免了傳統(tǒng)分代方式整個(gè)使用完了再暫停的回收的情況。
2.分代收集:(商用默認(rèn))基于對(duì)象生命周期劃分為新生代、老年代、元空間,對(duì)不同生命周期的對(duì)象使用不同的算法進(jìn)行回收。
按系統(tǒng)線(xiàn)程可分為:串行收集算法,并行收集算法,并發(fā)收集算法
1.串行收集:使用單線(xiàn)程處理垃圾回收工作,實(shí)現(xiàn)容易,效率較高。不足之處:1.無(wú)法發(fā)揮多處理器的優(yōu)勢(shì) 2.需要暫停用戶(hù)線(xiàn)程
2.并行收集:使用多線(xiàn)程處理垃圾回收工作,速度快,效率高。理論上CPU數(shù)目越多,越能體現(xiàn)出并行收集器的優(yōu)勢(shì)。不足之處:需要暫停用戶(hù)線(xiàn)程
3.并發(fā)收集:垃圾線(xiàn)程與用戶(hù)線(xiàn)程同時(shí)工作。系統(tǒng)在垃圾回收時(shí)不需要暫停用戶(hù)線(xiàn)程
GC收集器常用組合
JVM性能調(diào)優(yōu)思路
理解GC日志
- [GC [PSYoungGen: 8192K->1000K(9216K)] 16004K->14604K(29696K), 0.0317424 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
- [GC [PSYoungGen: 9192K->1016K(9216K)] 22796K->20780K(29696K), 0.0314567 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
- [Full GC [PSYoungGen: 8192K->8192K(9216K)] [ParOldGen: 20435K->20435K(20480K)] 28627K->28627K(29696K), [Metaspace: 8469K->8469K(1056768K)], 0.1307495 secs] [Times: user=0.50 sys=0.00, real=0.13 secs]
- [Full GC [PSYoungGen: 8192K->8192K(9216K)] [ParOldGen: 20437K->20437K(20480K)] 28629K->28629K(29696K), [Metaspace: 8469K->8469K(1056768K)], 0.1240311 secs] [Times: user=0.42 sys=0.00, real=0.12 secs]
常見(jiàn)異常

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流