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

資訊專欄INFORMATION COLUMN

JAVA虛擬機(jī)

edagarli / 1109人閱讀

摘要:它一般運(yùn)行在模式下的虛擬機(jī)。設(shè)置最大垃圾收集停頓時(shí)間設(shè)置吞吐量大小開關(guān)參數(shù),打開以后就由虛擬機(jī)自動(dòng)調(diào)節(jié)策略。

Java內(nèi)存區(qū)域

    程序計(jì)數(shù)器:當(dāng)前線程所執(zhí)行字節(jié)碼的行號(hào)指示器,字節(jié)碼解釋器工作時(shí)就是通過(guò)改變這個(gè)計(jì)數(shù)器的值來(lái)選取下一條需要執(zhí)行的字節(jié)碼指令

    虛擬機(jī)棧:指我們平常所說(shuō)的堆棧中的棧(或者說(shuō)是虛擬機(jī)棧中的局部變量部分),線程私有的,生命周期與線程相同。用來(lái)描述Java方法執(zhí)行的內(nèi)存模型,用于存儲(chǔ)局部變量表、操作棧、動(dòng)態(tài)鏈接、方法出口等信息

    本地方法棧:跟虛擬機(jī)棧類似,不過(guò)本地方法棧是為虛擬機(jī)使用到的Native方法服務(wù)

    堆:被所有線程共享的一塊內(nèi)存區(qū)域,用來(lái)存放對(duì)象實(shí)例以及對(duì)象類型數(shù)據(jù)的地址信息,如果堆中沒(méi)有內(nèi)存完成實(shí)例分配,并且堆也無(wú)法再擴(kuò)展時(shí),將會(huì)拋出OutOfMemoryError異常

    方法區(qū):跟堆一樣,是各個(gè)線程共享的內(nèi)存區(qū)域,用來(lái)存儲(chǔ)類信息(對(duì)象類型、父類、實(shí)現(xiàn)的接口、方法等)、常量、靜態(tài)變量,其中方法區(qū)還包含一個(gè)運(yùn)行時(shí)常量池,用來(lái)存儲(chǔ)編譯期生成的各種字面量和符號(hào)引用

垃圾收集器及內(nèi)存分配策略

對(duì)象存活判斷

垃圾回收主要是回收堆內(nèi)存。在垃圾回收期(GC)回收之前,需要確定哪些對(duì)象可以回收,有以下幾種方法:

    引用計(jì)數(shù)算法
    原理:給對(duì)象添加一個(gè)引用計(jì)數(shù)器,每當(dāng)有一個(gè)地方引用它時(shí),計(jì)數(shù)器值就加1;當(dāng)引用失效時(shí),計(jì)數(shù)器值就減1;任何時(shí)刻計(jì)數(shù)器都為0的對(duì)象就是不可能再被使用的。這種算法效率高。不過(guò)很難解決對(duì)象之間的相互循環(huán)引用的問(wèn)題。

    根搜索算法(默認(rèn))
    原理:通過(guò)一系列的名為“GC Roots”的對(duì)象作為起始點(diǎn),從這些節(jié)點(diǎn)開始向下搜索,搜索所走過(guò)的路徑稱為引用鏈,當(dāng)一個(gè)對(duì)象到GC Roots沒(méi)有任何引用鏈相連時(shí),則證明此對(duì)象是不可用的。作為GC Roots的對(duì)象包括以下幾種:

    虛擬機(jī)棧中的引用的對(duì)象

    方法區(qū)中的類靜態(tài)屬性引用的對(duì)象

    方法區(qū)中的常量引用的對(duì)象

    本地方法棧中JNI的引用的對(duì)象

引用

強(qiáng)引用,類似"Object obj = new Object()"這種,只要強(qiáng)引用存在,則GC永遠(yuǎn)不會(huì)回收被引用的對(duì)象

軟引用,指還有用,但是并非必須的對(duì)象,內(nèi)存溢出之前進(jìn)行回收,實(shí)現(xiàn)軟引用可以通過(guò)SoftReference類,軟引用主要用戶實(shí)現(xiàn)類似緩存的功能,在內(nèi)存足夠的情況下直接通過(guò)軟引用取值,無(wú)需從繁忙的真實(shí)來(lái)源查詢數(shù)據(jù),提升速度;當(dāng)內(nèi)存不足時(shí),自動(dòng)刪除這部分緩存數(shù)據(jù),從真正的來(lái)源查詢這些數(shù)據(jù)。

弱引用,跟軟引用一樣,不過(guò)強(qiáng)度比軟引用弱一些,第二次垃圾回收時(shí)回收,實(shí)現(xiàn)弱引用可以通過(guò)WeakReference類,弱引用主要用于監(jiān)控對(duì)象是否已經(jīng)被垃圾回收器標(biāo)記為即將回收的垃圾,可以通過(guò)弱引用的isEnQueued方法返回對(duì)象是否被垃圾回收器標(biāo)記。

虛引用,是最弱的一種引用關(guān)系,垃圾回收時(shí)回收,無(wú)法通過(guò)引用取到對(duì)象值。主要用于檢測(cè)對(duì)象是否已經(jīng)從內(nèi)存中刪除。

垃圾收集算法

    標(biāo)記-清除算法:首先標(biāo)記出所有需要回收的對(duì)象,在標(biāo)記完成后統(tǒng)一回收所有被標(biāo)記的對(duì)象,不過(guò)該算法有以下缺點(diǎn):

    效率低

    空間問(wèn)題,該算法會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片,這樣導(dǎo)致程序在以后的運(yùn)行中如果需要分配較大對(duì)象時(shí)無(wú)法找到足夠的連續(xù)內(nèi)存而觸發(fā)另一次垃圾收集動(dòng)作

    復(fù)制算法:將可用內(nèi)存按容量劃分大小相等的兩塊,每次只使用其中的一塊。當(dāng)一塊內(nèi)存用完了,就將還存活的對(duì)象復(fù)制到另外一塊上面,然后再把已使用過(guò)的內(nèi)存空間一次清理掉。這種算法實(shí)現(xiàn)簡(jiǎn)單,效率高,不過(guò)會(huì)將可使用的內(nèi)存減少一半。如果對(duì)象存活率高就要執(zhí)行較多的復(fù)制操作,將導(dǎo)致效率變低。目前在復(fù)制算法中,通常是將內(nèi)存分為一塊較大的Eden空間和兩塊較小的Survivor空間,每次只使用Eden和一塊Survivor。當(dāng)回收時(shí),將Eden和Survivor中還存活的對(duì)象一次性拷貝到另外一塊Survivor中,最后清理使用的Eden和Survivor。并且以老年代作為空間分配擔(dān)保,即Survivor無(wú)法容納的對(duì)象會(huì)直接進(jìn)入老年代。目前新生代主要采用這個(gè)算法。

    標(biāo)記-整理算法:將所有存活的對(duì)象都向一端移動(dòng),然后直接清理掉邊界以外的內(nèi)存。

    分代收集算法:根據(jù)對(duì)象的存活周期的不同將內(nèi)存劃分為幾塊,一般是分為新生代和老年代。然后根據(jù)各個(gè)年代的特點(diǎn)采用最適當(dāng)?shù)氖占惴āP律ǔ2捎脧?fù)制算法,因?yàn)閷?duì)象生存時(shí)間都不長(zhǎng)。老年代一般采用"標(biāo)記-清理"或者"標(biāo)記-整理"算法回收,因?yàn)槔夏甏袑?duì)象存活率高,沒(méi)有額外空間對(duì)它進(jìn)行分配擔(dān)保。

垃圾收集器

    Serial收集器:這是一個(gè)單線程的收集器,該收集器在進(jìn)行垃圾收集時(shí),必須暫停其它所有的工作線程,不過(guò)該收集器簡(jiǎn)單而高效。它一般運(yùn)行在Client模式下的虛擬機(jī)。新生代收集器。

    ParNew收集器:這是一個(gè)多線程版本的Serial收集器。新生代收集器。

    Parallel Scavenge收集器:新生代收集器,使用復(fù)制算法,并行多線程。它主要是控制吞吐量=(運(yùn)行用戶代碼時(shí)間)/(運(yùn)行用戶代碼時(shí)間+垃圾收集時(shí)間)。有兩個(gè)參數(shù)可以用來(lái)精確控制吞吐量。

    -XX:MaxGCPauseMillis:設(shè)置最大垃圾收集停頓時(shí)間

    -XX:GCTimeRatio:設(shè)置吞吐量大小

    -XX:+UseAdaptiveSizePolicy:開關(guān)參數(shù),打開以后就由虛擬機(jī)自動(dòng)調(diào)節(jié)策略。這也是跟ParNew收集器的一個(gè)重要區(qū)別

    Serial Old收集器:這是Serial收集器的老年代版本,使用"標(biāo)記-整理"算法,該收集器有兩大用途,一是與Parallel Scavenge收集器搭配使用。二是作為CMS收集器的后備預(yù)案,在并發(fā)收集發(fā)生Concurrent Mode Failure的時(shí)候使用。

    Parallel Old收集器:是Parallel Scavenge收集器的老年代版本。使用"標(biāo)記-整理"算法。

    CMS收集器:以獲取最短回收停頓時(shí)間為目標(biāo)的收集器。重視服務(wù)的響應(yīng)速度。主要用于互聯(lián)網(wǎng)或B/S系統(tǒng)的服務(wù)端上。基于"標(biāo)記-清除"算法。老年代收集器。使用CMS收集器時(shí),不能像其它收集器那樣等到老年代幾乎被填滿了再進(jìn)行收集,需要預(yù)留一部分空間提供并發(fā)收集時(shí)的程勛運(yùn)行使用。主要優(yōu)點(diǎn)就是并發(fā)收集、低停頓。它有以下缺點(diǎn):

    對(duì)CPU資源非常敏感

    無(wú)法處理浮動(dòng)垃圾。即在垃圾收集階段用戶線程繼續(xù)進(jìn)行,這個(gè)過(guò)程會(huì)有新的垃圾產(chǎn)生,但是CMS收集器不會(huì)對(duì)這部分垃圾(浮動(dòng)垃圾)進(jìn)行標(biāo)記。如果預(yù)留的內(nèi)存空間不足,就會(huì)導(dǎo)致Concurrent Mode Failure。這時(shí)會(huì)臨時(shí)啟動(dòng)Serial Old收集器重新進(jìn)行老年代的垃圾收集,導(dǎo)致停頓時(shí)間過(guò)長(zhǎng)。

    由于采用的算法,會(huì)導(dǎo)致收集結(jié)束時(shí)產(chǎn)生大量空間碎片。

    G1收集器:基于"標(biāo)記-整理"算法實(shí)現(xiàn)。可以非常精確的控制停頓,并且在不犧牲吞吐量的前提下完成低停頓的內(nèi)存回收。因?yàn)樵撌占鲿?huì)將整個(gè)java堆劃分為多個(gè)大小固定的獨(dú)立區(qū)域,并且跟蹤這些區(qū)域的垃圾堆積程度,每次根據(jù)允許的收集時(shí)間,優(yōu)先回收垃圾最多的區(qū)域。 垃圾收集相關(guān)的常用參數(shù)參見(jiàn)下圖:

內(nèi)存分配

    對(duì)象首先在新生代Eden區(qū)分配,當(dāng)Eden沒(méi)有足夠的空間進(jìn)行分配時(shí),虛擬機(jī)將發(fā)起一次MinorGC

    大對(duì)象直接進(jìn)入老年代,通過(guò)-XX:PretenureSizeThreshold參數(shù)區(qū)分,大于這個(gè)值的表示大對(duì)象,該參數(shù)只對(duì)Serial和ParNew有效

    長(zhǎng)期存活的對(duì)象將進(jìn)入老年代,識(shí)別對(duì)象長(zhǎng)期存活通過(guò)參數(shù)-XX:MaxTenuringThreshold設(shè)定,對(duì)于每個(gè)對(duì)象而言,虛擬機(jī)都會(huì)定義一個(gè)年齡計(jì)數(shù)器,如果對(duì)象在經(jīng)過(guò)第一次MinorGC后仍然存活,并且能夠被Survivor容納的話,就將被移動(dòng)到Survivor中,并且年齡增加一歲。每經(jīng)過(guò)一次MinorGC,年齡就增加一歲,超過(guò)設(shè)定值或者默認(rèn)值(15),就會(huì)進(jìn)入老年代中。

名詞解釋

    MinorGC:指發(fā)生在新生代的垃圾收集動(dòng)作,頻繁,速度快

    MajorGC/Full GC:指發(fā)生在老年代的GC,速度慢

    大對(duì)象:需要大量連續(xù)內(nèi)存空間的Java對(duì)象,比如很長(zhǎng)的字符串及數(shù)組,應(yīng)當(dāng)避免短命的大對(duì)象

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

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

相關(guān)文章

  • 深入理解Java虛擬機(jī)到底是什么

    摘要:由虛擬機(jī)加載的類,被加載到虛擬機(jī)內(nèi)存中之后,虛擬機(jī)會(huì)讀取并執(zhí)行它里面存在的字節(jié)碼指令。虛擬機(jī)中執(zhí)行字節(jié)碼指令的部分叫做執(zhí)行引擎。 什么是Java虛擬機(jī)? 作為一個(gè)Java程序員,我們每天都在寫Java代碼,我們寫的代碼都是在一個(gè)叫做Java虛擬機(jī)的東西上執(zhí)行的。但是如果要問(wèn)什么是虛擬機(jī),恐怕很多人就會(huì)模棱兩可了。在本文中,我會(huì)寫下我對(duì)虛擬機(jī)的理解。因?yàn)槟芰λ蓿赡苡行┑胤矫枋龅牟粔蚯?..

    宋華 評(píng)論0 收藏0
  • 《深入理解Java虛擬機(jī)》(一)Java虛擬機(jī)發(fā)展史

    摘要:虛擬機(jī)發(fā)展史注本文大部分摘自深入理解虛擬機(jī)第二版作為一名開發(fā)人員,不能局限于語(yǔ)言規(guī)范,更需要對(duì)虛擬機(jī)規(guī)范有所了解。虛擬機(jī)規(guī)范有多種實(shí)現(xiàn),其中是和中所帶的虛擬機(jī),也是目前使用范圍最廣的虛擬機(jī)。世界第一款商用虛擬機(jī)。號(hào)稱世界上最快的虛擬機(jī)。 Java虛擬機(jī)發(fā)展史 注:本文大部分摘自《深入理解Java虛擬機(jī)(第二版)》 作為一名Java開發(fā)人員,不能局限于Java語(yǔ)言規(guī)范,更需要對(duì)Java虛...

    張春雷 評(píng)論0 收藏0
  • 《深入理解Java虛擬機(jī)》(二)Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)

    摘要:虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)分為以下幾個(gè)部分。程序計(jì)數(shù)器也是在虛擬機(jī)規(guī)范中唯一沒(méi)有規(guī)定任何異常情況的區(qū)域。在方法運(yùn)行期間不會(huì)改變局部變量表的大小。長(zhǎng)度在位和位的虛擬機(jī)中,分別為官方稱它為。 Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū) 詳解 2.1 概述 本文參考的是周志明的 《深入理解Java虛擬機(jī)》第二章 ,為了整理思路,簡(jiǎn)單記錄一下,方便后期查閱。 2.2 運(yùn)行時(shí)數(shù)據(jù)區(qū)域 Java虛擬機(jī)在Java程序運(yùn)行時(shí)...

    draveness 評(píng)論0 收藏0
  • Java虛擬機(jī)規(guī)范(介紹)

    摘要:此處指定的虛擬機(jī)與平臺(tái)兼容,并支持語(yǔ)言規(guī)范中指定的編程語(yǔ)言。第章說(shuō)明了虛擬機(jī)的指令集,按字母順序顯示操作碼助記符。 介紹 一點(diǎn)歷史 Java?編程語(yǔ)言是一種通用的、并發(fā)的、面向?qū)ο蟮恼Z(yǔ)言,它的語(yǔ)法類似于C和C++,但它省略了許多使C和C++復(fù)雜、混亂和不安全的特性。最初開發(fā)Java平臺(tái)是為了解決為聯(lián)網(wǎng)的消費(fèi)者設(shè)備構(gòu)建軟件的問(wèn)題,它旨在支持多種主機(jī)架構(gòu),并允許安全交付軟件組件,為了滿足這...

    chnmagnus 評(píng)論0 收藏0
  • 【JVM從小白學(xué)成大佬】2.Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)

    摘要:虛擬機(jī)在執(zhí)行程序的過(guò)程中會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域。棧幀棧幀是用于支持虛擬機(jī)進(jìn)行方法調(diào)用和方法執(zhí)行的數(shù)據(jù)結(jié)構(gòu),它是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)中的虛擬機(jī)棧的棧元素。棧幀的概念結(jié)構(gòu)如下運(yùn)行時(shí)數(shù)據(jù)區(qū)腦圖高 這里我們先說(shuō)句題外話,相信大家在面試中經(jīng)常被問(wèn)到介紹Java內(nèi)存模型,我在面試別人時(shí)也會(huì)經(jīng)常問(wèn)這個(gè)問(wèn)題。但是,往往都會(huì)令我比較尷尬,我還話音未落,面試者就會(huì)背誦一段(Java虛擬...

    shuibo 評(píng)論0 收藏0
  • Java虛擬機(jī)規(guī)范(Java虛擬機(jī)的結(jié)構(gòu))

    摘要:原始類型和值虛擬機(jī)支持的原始數(shù)據(jù)類型是數(shù)字類型布爾類型和類型。,其值為位帶符號(hào)的二進(jìn)制補(bǔ)碼整數(shù),其默認(rèn)值為零。 Java虛擬機(jī)的結(jié)構(gòu) 本文檔指定了一個(gè)抽象機(jī)器,它沒(méi)有描述Java虛擬機(jī)的任何特定實(shí)現(xiàn)。 要正確實(shí)現(xiàn)Java虛擬機(jī),你只需要能夠讀取類文件格式并正確執(zhí)行其中指定的操作,不屬于Java虛擬機(jī)規(guī)范的實(shí)現(xiàn)細(xì)節(jié)會(huì)不必要地限制實(shí)現(xiàn)者的創(chuàng)造力。例如,運(yùn)行時(shí)數(shù)據(jù)區(qū)的內(nèi)存布局、使用的垃圾收集...

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

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

0條評(píng)論

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