国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

jvm體系結(jié)構(gòu)和gc調(diào)優(yōu)(一)

wupengyu / 608人閱讀

摘要:做好的優(yōu)化能大大提升系統(tǒng)的性能體系結(jié)構(gòu)概覽大致流程如圖編譯好的文件通過類加載器從物理結(jié)構(gòu)轉(zhuǎn)換成運(yùn)行時(shí)數(shù)據(jù)區(qū)結(jié)構(gòu)。后面再寫一篇關(guān)于調(diào)優(yōu)的

什么是jvm

jvm是java虛擬機(jī)的縮寫。所有的java程序都是在jvm上運(yùn)行的。做好jvm的優(yōu)化能大大提升系統(tǒng)的性能

jvm體系結(jié)構(gòu)概覽

大致流程如圖:編譯好的class文件通過類加載器從物理結(jié)構(gòu)轉(zhuǎn)換成運(yùn)行時(shí)數(shù)據(jù)區(qū)結(jié)構(gòu)。再通過jvm內(nèi)置執(zhí)行引擎和本地方法的調(diào)用實(shí)現(xiàn) ps:本地方法就是帶有native關(guān)鍵字的方法

其中方法區(qū)和堆是最重要的兩塊區(qū)域(這里是以java7為參照。java8沒有方法區(qū))
因?yàn)檫@兩塊是gc算法作用的最主要區(qū)域

gc算法

如果需要收集垃圾,則必須先找到垃圾。

1.引用計(jì)數(shù)法

解釋:每個(gè)對(duì)象都帶有一個(gè)引用計(jì)數(shù)器,當(dāng)其他聲明的變量指向這個(gè)對(duì)象時(shí)候,計(jì)數(shù)器就+1,當(dāng)指向消逝時(shí)候,就將計(jì)數(shù)器-1.垃圾回收只回收計(jì)數(shù)為0的對(duì)象。
缺點(diǎn):無法回收循環(huán)引用的情況,比如A引用了B,B引用了C,C引用了A. 這種GC算法還需要編譯器進(jìn)行配合,對(duì)對(duì)象引用進(jìn)行計(jì)數(shù),需要額外生成代碼。

2.可達(dá)性分析

解釋:設(shè)立若干個(gè)根對(duì)象,當(dāng)一個(gè)對(duì)象不能通過任何根對(duì)象引用達(dá)到,那么這個(gè)對(duì)象在finalize中有一次可以請(qǐng)求“重生”機(jī)會(huì),或者直接忽略finalize,選擇直接死亡。

找到垃圾后,開始垃圾收集

標(biāo)記清除算法

簡(jiǎn)單解釋下:首先標(biāo)記出所有需要回收的對(duì)象,在標(biāo)記完成后統(tǒng)一回收掉所有被標(biāo)記的對(duì)象。它的主要缺點(diǎn)有兩個(gè):一個(gè)是效率問題,標(biāo)記和清除過程的效率都不高;另外一個(gè)是空間問題,標(biāo)記清除之后會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片,空間碎片太多可能會(huì)導(dǎo)致,當(dāng)程序在以后的運(yùn)行過程中需要分配較大對(duì)象時(shí)無法找到足夠的連續(xù)內(nèi)存而不得不提前觸發(fā)另一次垃圾收集動(dòng)作

這是最基本的gc算法,后續(xù)的gc算法都是根據(jù)這種思路來改進(jìn)的

標(biāo)記壓縮算法

標(biāo)記過程仍然與“標(biāo)記-清除”算法一樣,但后續(xù)步驟不是直接對(duì)可回收對(duì)象進(jìn)行清理,而是讓所有存活的對(duì)象都向一端移動(dòng),然后直接清理掉端邊界以外的內(nèi)存

復(fù)制算法

將可用內(nèi)存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當(dāng)這一塊的內(nèi)存用完了,就將還存活著的對(duì)象復(fù)制到另外一塊上面,然后再把已使用過的內(nèi)存空間一次清理掉。

分代收集算法

把Java堆分為新生代和老年代,這樣就可以根據(jù)各個(gè)年代的特點(diǎn)采用最適當(dāng)?shù)氖占惴āT谛律校看卫占瘯r(shí)都發(fā)現(xiàn)有大批對(duì)象死去,只有少量存活,那就選用復(fù)制算法,只需要付出少量存活對(duì)象的復(fù)制成本就可以完成收集。而老年代中因?yàn)閷?duì)象存活率高、沒有額外空間對(duì)它進(jìn)行分配擔(dān)保,就必須使用“標(biāo)記-清理”或“標(biāo)記-整理”算法來進(jìn)行回收。
這里總共會(huì)有三種gc


不同的gc使用不同的gc算法

注:默認(rèn)新生代eden區(qū)和survivor區(qū)比例為8:1:1

火車算法

最先進(jìn)的g1收集器使用的gc算法,相對(duì)于分代收集,它的分區(qū)處理更徹底

在火車算法中,內(nèi)存被分為塊,多個(gè)塊組成一個(gè)集合。為了形象化,一節(jié)車廂代表一個(gè)塊,一列火車代表一個(gè)集合,火車與車箱都按創(chuàng)建順序標(biāo)號(hào),每個(gè)車廂大小相等,但每個(gè)火車包含的車廂數(shù)不一定相等;每節(jié)車箱有一個(gè)被記憶集合,而每輛火車的記憶集合是它所有車廂記憶集合的總和;算法在執(zhí)行時(shí),要么收集最小數(shù)字車廂,要么收集最小數(shù)字火車。如果整節(jié)火車都是垃圾,就收集最小數(shù)字火車。

現(xiàn)有該場(chǎng)景

內(nèi)存分為四塊。 其中F,C,D,E是垃圾。G,A,B存活對(duì)象
首先掃描第一塊內(nèi)存。發(fā)現(xiàn)G是存活對(duì)象,F(xiàn)是垃圾。利用記憶集合將G的應(yīng)用存到最后一塊內(nèi)存
回收第一塊內(nèi)存

如果再次發(fā)生gc,則同樣掃描第二塊內(nèi)存。發(fā)現(xiàn)A,B都是存活對(duì)象,都移到最后一塊內(nèi)存。回收第二塊內(nèi)存

因?yàn)榛疖囁惴ㄊ菍⒁粔K內(nèi)存的對(duì)象移到另一塊內(nèi)存上并清除原來的內(nèi)存。很像復(fù)制算法。
所以火車算法就被稱為局部復(fù)制,外部標(biāo)記清理

火車算法的問題

如果要保存一個(gè)比內(nèi)存塊大的對(duì)象怎么辦

如果兩個(gè)對(duì)象在不同內(nèi)存塊相互調(diào)用怎么辦

垃圾回收器 垃圾收集器一覽

術(shù)語

新生代垃圾收集器

serial (串行收集器) 特點(diǎn)

串行,stop the world

適用場(chǎng)景

單cpu,新生代內(nèi)存小,對(duì)暫停時(shí)間要求不高的應(yīng)用
是client和32位windows的默認(rèn)垃圾收集器

對(duì)象分配到old區(qū)的情況

對(duì)象大于eden區(qū)

大對(duì)象直接分到old區(qū)

晉升規(guī)則

經(jīng)歷多次gc后仍存活的對(duì)象

to survivor區(qū)裝不下直接晉升

parallel scanvenge收集器 特點(diǎn)

并行,stop the world
并行線程數(shù)默認(rèn)值:cpu <= 8 則 線程數(shù)=cpu數(shù) cpu>8 則(3+cpu*5)/8
可自定義線程數(shù) :

適用場(chǎng)景

多cpu,對(duì)暫停時(shí)間較短的應(yīng)用
是server和2核cpu,2g內(nèi)存的默認(rèn)選擇

對(duì)象分配到old區(qū)的情況

在eden區(qū)分配失敗,且對(duì)象大于eden的一半

大對(duì)象直接分到old區(qū)

晉升規(guī)則

經(jīng)歷多次gc后仍存活的對(duì)象

to survivor區(qū)裝不下直接晉升

parnew 特點(diǎn)

并行,stop the world
serial的多線程版
可搭配cms
不能搭配parllel old

適用場(chǎng)景

多cpu,對(duì)暫停時(shí)間較短的應(yīng)用
是server和2核cpu,2g內(nèi)存的默認(rèn)選擇

對(duì)象分配到old區(qū)的情況

對(duì)象大于eden區(qū)

大對(duì)象直接分到old區(qū)

晉升規(guī)則

經(jīng)歷多次gc后仍存活的對(duì)象

to survivor區(qū)裝不下直接晉升

老年代垃圾收集器

serial old 特點(diǎn)

串行,stop the world ,標(biāo)記整理算法,清除時(shí)間長(zhǎng)

適用場(chǎng)景

是client和32位windows的默認(rèn)垃圾收集器

parallel old 特點(diǎn)

串行,stop the world ,標(biāo)記整理算法

適用場(chǎng)景

是server和2核cpu,2g內(nèi)存的默認(rèn)選擇

cms 特點(diǎn)

并行,并發(fā),標(biāo)記清理算法
默認(rèn)并發(fā)線程數(shù):(新生代并行線程數(shù)+3)/4

適用場(chǎng)景

暫停時(shí)間短,很適用于追求高響應(yīng)速度的互聯(lián)網(wǎng)引用

執(zhí)行步驟

缺點(diǎn)

和應(yīng)用搶占cpu

gc耗時(shí)長(zhǎng)

浮動(dòng)垃圾

內(nèi)存碎片

第一篇先到這兒了。先消化一下。后面再寫一篇關(guān)于調(diào)優(yōu)的

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/69520.html

相關(guān)文章

  • JVM體系結(jié)構(gòu)GC調(diào)優(yōu)(二)

    摘要:在設(shè)計(jì)堆的大小時(shí)。設(shè)計(jì)為比更大的數(shù)前提是內(nèi)存允許。這樣既可以降低堆調(diào)整的頻率,還可以提高系統(tǒng)的負(fù)載能力新生代調(diào)優(yōu)大小增大區(qū)。因?yàn)闀r(shí)間跟存活對(duì)象成正比新生代調(diào)優(yōu)晉升盡可能讓對(duì)象停留在中。 jvm支持的垃圾收集器組合 showImg(https://segmentfault.com/img/bVbbcTv?w=1101&h=351); 組合選擇的標(biāo)準(zhǔn) 吞吐量=應(yīng)用運(yùn)行時(shí)間/總時(shí)間 關(guān)...

    DirtyMind 評(píng)論0 收藏0
  • 面試官問我JVM調(diào)優(yōu),我忍不住了!

    面試官:今天要不來聊聊JVM調(diào)優(yōu)相關(guān)的吧?面試官:你曾經(jīng)在生產(chǎn)環(huán)境下有過調(diào)優(yōu)JVM的經(jīng)歷嗎?候選者:沒有面試官:...候選者:嗯...是這樣的,我們一般優(yōu)化系統(tǒng)的思路是這樣的候選者:1. 一般來說關(guān)系型數(shù)據(jù)庫(kù)是先到瓶頸,首先排查是否為數(shù)據(jù)庫(kù)的問題候選者:(這個(gè)過程中就需要評(píng)估自己建的索引是否合理、是否需要引入分布式緩存、是否需要分庫(kù)分表等等)候選者:2. 然后,我們會(huì)考慮是否需要擴(kuò)容(橫向和縱向都...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • JVM調(diào)優(yōu)之經(jīng)驗(yàn)

    摘要:內(nèi)存設(shè)置現(xiàn)在線上業(yè)務(wù)系統(tǒng)基本物理內(nèi)存都是夠用的,不過物盡其用,我們調(diào)優(yōu)就是爭(zhēng)取讓每空間都發(fā)揮出最大的作用。區(qū)總內(nèi)存減去一個(gè)區(qū)的大小不宜過大,否則可能把物理內(nèi)存耗光。 在生產(chǎn)系統(tǒng)中,高吞吐和低延遲一直都是JVM調(diào)優(yōu)的最終目標(biāo),但這兩者恰恰又是相悖的,魚和熊掌不可兼得,所以在調(diào)優(yōu)之前要清楚舍誰而取誰。一般計(jì)算任務(wù)和組件服務(wù)會(huì)偏向高吞吐,而web展示則偏向低延遲才會(huì)帶來更好的用戶體驗(yàn)。 本文...

    worldligang 評(píng)論0 收藏0
  • [譯]GC專家系列3-GC調(diào)優(yōu)

    摘要:原文鏈接本篇是專家系列的第三篇。但是,請(qǐng)記住調(diào)優(yōu)是不得已時(shí)的選擇。縮短耗時(shí)的單次執(zhí)行與相比,耗時(shí)有較明顯的增加。創(chuàng)建文件過程中,進(jìn)程會(huì)中斷,因此不要在正常運(yùn)行時(shí)系統(tǒng)上做此操作。因此校驗(yàn)結(jié)果并根據(jù)具體的服務(wù)需要,決定是否要進(jìn)行調(diào)優(yōu)。 原文鏈接:http://www.cubrid.org/blog/dev-platform/how-to-tune-java-garbage-collecti...

    leap_frog 評(píng)論0 收藏0
  • jvm調(diào)優(yōu)

    摘要:一內(nèi)存調(diào)優(yōu)主要的目的是減小的頻率和的次數(shù)。調(diào)優(yōu)工具之主要用來輸出中運(yùn)行的進(jìn)程狀態(tài)信息。調(diào)優(yōu)工具之和用來查看堆內(nèi)存使用狀況,一般結(jié)合使用。 一、jvm內(nèi)存調(diào)優(yōu) 主要的...

    snowLu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<