中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

JVM快速調(diào)優(yōu)手冊之三:內(nèi)存分配策略-創(chuàng)新互聯(lián)

JVM快速調(diào)優(yōu)手冊之三: 內(nèi)存分配策略

10年積累的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有邱縣免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
了解GC其中很重要一點就是了解JVM的內(nèi)存分配策略:即對象在哪里分配和對象什么時候回收。

    Java技術(shù)體系中所提倡的自動內(nèi)存管理可以歸結(jié)于兩個部分:給對象分配內(nèi)存以及回收分配給對象的內(nèi)存。

    我們都知道,Java對象分配,都是在Java堆上進行分配的,雖然存在JIT編譯后被拆分為標(biāo)量類型并簡介地在棧上進行分配。如果采用分代算法,那么新生的對象是分配在新生代的Eden區(qū)上的。如果啟動了本地線程分配緩沖,將按線程優(yōu)先在TLAB上進行分配。

    事實上,Java的分配規(guī)則不是百分百固定的,其取決于當(dāng)前使用的是哪一種垃圾收集器組合,還有虛擬機中與內(nèi)存相關(guān)的參數(shù)的設(shè)置。

    簡單來說,對象內(nèi)存分配主要是在堆中分配。但是分配的規(guī)則并不是固定的,取決于使用的收集器組合以及JVM內(nèi)存相關(guān)參數(shù)的設(shè)定。

    下面Serial和Serial Old收集器做一個內(nèi)存分配和回收的策略總結(jié)。

對象優(yōu)先在新生代Eden分配

首先,讓我們來看一下新生代的內(nèi)存分配情況

內(nèi)存分配情況:將JVM內(nèi)存劃分為一塊較大的Eden空間(80%)和兩塊小的Servivor(各占10%)。當(dāng)回收時,將Eden和Survivor中還存活的對象一次性采用復(fù)制算法直接復(fù)制到另外一塊Servivor空間上,最后清理到院Eden空間和原先的Survivor空間中的數(shù)據(jù)。

大多數(shù)情況下,對象在新生代Eden區(qū)中分配。當(dāng)Eden區(qū)沒有足夠空間進行分配時,JVM將發(fā)起一次Minor GC。
在這里先說明兩個概念:
  • 新生代GC(Minor GC):指發(fā)生在新生代的垃圾收集動作,因為Java對象大多是具有朝生夕滅的特性,所以Minor GC非常頻繁,而且該速度也比較快。
  • 老年代GC(Major GC/Full GC):指發(fā)生在老年代的GC,出現(xiàn)了Major GC,一般可能也會伴隨著一次Minor GC,但是與Minor GC不同的是,Major GC的速度慢十倍以上。

大對象直接進入老年代

我們先對所謂的大對象做一個定義:大對象,這里指的是需要大量連續(xù)內(nèi)存空間的Java對象。最典型的大對象可以是很長的字符串和數(shù)組。

JVM對大對象的態(tài)度:大對象對于JVM的內(nèi)存分配來說是十分麻煩的,如果我們將大對象分配在新生代中,那樣子的話很容易導(dǎo)致內(nèi)存還有不少空間時就提前觸發(fā)垃圾收集以獲取足夠的連續(xù)空間來“安置”它們。

為了避免上述情況的經(jīng)常發(fā)生而導(dǎo)致不需要的GC活動所浪費的資源和時間,可采用的分配策略是將大對象直接分配到老年代中去,虛擬機中也提供了**-XX:PretenureSizeThreshold**參數(shù),令大于這個設(shè)置值的對象直接在老年代里面分配內(nèi)容。
-XX:PretenureSizeThreshold只對Serial和ParNew收集器有效。

長期存活的對象將進入老年代

當(dāng)JVM采用分代收集的思想來管理內(nèi)存時,為了識別哪些對象應(yīng)該放在新生代、哪些對象應(yīng)該放在老年代,JVM給每個對象定義了一個對象年齡計數(shù)器。

對象年齡計數(shù)器:如果對象在Eden出生并經(jīng)過第一次Minor GC后仍然存活,并且能被Survivor容納的話,便可以被移動到Survivor空間中,年齡計數(shù)器將設(shè)置該對象的年齡為1.對于對象在Survivor區(qū)每經(jīng)過一次Minor GC,年齡便增加1歲,當(dāng)它的年齡增加到一定程度(可通過參數(shù)-XX:MaxTenuringThreshold設(shè)置)默認15,該對象便會進入到老年代中。成為老年代的對象。

動態(tài)對象年齡判定

事實上,有的虛擬機并不永遠地要求對象的年齡必須達到MaxTeruringThreshold才能晉升老年代,如果在Survivor空間中相同年齡所有對象大小的總和大于Surivior空間的一半,年齡大于或等于該年齡的對象就可以直接進行老年代,無須等到MaxTeruringThreshold中所要求的年齡。

空間分配擔(dān)保

在發(fā)生Minor GC之前,虛擬機會先檢查老年代中大的可用的連續(xù)空間是否大于新生代中所有對象總空間,如果這個條件成立,那么Minor GC可以確保是安全的,如果不成立,則虛擬機會查看HandlePromotionFaiure設(shè)置值是否允許擔(dān)保失敗。如果允許,那么會繼續(xù)檢查老年代大可用的連續(xù)空間是否大于歷次晉升到老年代對象的平均大小,如果大于,將嘗試進行一次Minor GC,盡管這次GC是有風(fēng)險的;如果小于,或者HandlePromotionFaiure設(shè)置不允許冒險,那么這時就要改為進行一次Full GC。

所謂冒險:也就是說當(dāng)用來輪轉(zhuǎn)的Survivor區(qū)無法承受新生代中所存活的對象內(nèi)存時,需要老年代進行分配擔(dān)保,把Survivor無法容納的對象直接進入老年代中,前提是老年代中。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

網(wǎng)頁名稱:JVM快速調(diào)優(yōu)手冊之三:內(nèi)存分配策略-創(chuàng)新互聯(lián)
文章位置:http://www.rwnh.cn/article14/dgscge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站建設(shè)、外貿(mào)建站、企業(yè)建站、品牌網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
紫阳县| 房产| 阜宁县| 武陟县| 扎兰屯市| 平和县| 河源市| 合作市| 静海县| 兴业县| 山丹县| 西乡县| 松阳县| 疏勒县| 射阳县| 盐津县| 布拖县| 那坡县| 新竹市| 太康县| 三明市| 永济市| 平顶山市| 澄城县| 建昌县| 岫岩| 枣强县| 阜平县| 金山区| 库车县| 临沂市| 吉安县| 四会市| 方山县| 民权县| 龙山县| 河北区| 施甸县| 江山市| 肃宁县| 冀州市|