付費(fèi)下載
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JVM面試題匯一:Java類(lèi)加載過(guò)程Java7加將該二進(jìn)制流中的靜態(tài)結(jié)構(gòu)轉(zhuǎn)化為方法去運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中生成該類(lèi)的Class對(duì)象,作為該類(lèi)的數(shù)據(jù)驗(yàn)ClassClass機(jī)范圍內(nèi),常量池中的常量是否有不被支持的類(lèi)型.符號(hào)驗(yàn)證這個(gè)動(dòng)作在后面的解析過(guò)程中發(fā)生主要是為了確保解析動(dòng)作能正確執(zhí)行準(zhǔn)Javapublicstaticintvalue=123;//value0。在初始化階段才會(huì)變?yōu)?23。解該階段主要完成符號(hào)到直接的轉(zhuǎn)換動(dòng)作。解析動(dòng)作并不一定在初始化動(dòng)作完成之初始Java程序代碼。使卸二:描述一下JVMClass文件的原理機(jī)制Java語(yǔ)言是一種具有動(dòng)態(tài)性的解釋型語(yǔ)言,類(lèi)(Class)JVM后才能運(yùn)行。當(dāng)運(yùn)行指定程序時(shí),JVM.class文件按照需求和一定的規(guī)則加載到內(nèi)存中,并組織成為一個(gè)完整的Java應(yīng)用程序。這個(gè)加載過(guò)程是由類(lèi)加載器完成,具體來(lái)說(shuō),就是由ClassLoader和它的子類(lèi)來(lái)實(shí)現(xiàn)的。類(lèi)加載器本身也是一個(gè)類(lèi),其實(shí)質(zhì)是把類(lèi)文件從new等方式創(chuàng)建對(duì)JVM中。顯示加載指的是通過(guò)直接調(diào)用class.forName()方法來(lái)把所需的類(lèi)加載到JVM中。JVM中,其以節(jié)約程序運(yùn)行時(shí)對(duì)內(nèi)存的開(kāi)銷(xiāo)。此外,在Java語(yǔ)言中,每個(gè)類(lèi)或接口都對(duì)應(yīng)一個(gè).class文件,這些文件可以被看成是一個(gè)個(gè)可以態(tài)加載的單元,因此當(dāng)只有部分類(lèi)在Java語(yǔ)言中,類(lèi)的加載是動(dòng)態(tài)的,它并不會(huì)將所有類(lèi)全部加載后再運(yùn)行,而是保證程序運(yùn)行的基礎(chǔ)類(lèi)(例如基類(lèi))JVM中,至于其他類(lèi),則在需要的時(shí)候才加class3class準(zhǔn)備,給類(lèi)中的靜態(tài)變量分配空間解析,將符號(hào)轉(zhuǎn)換為直接(這一步可選Java內(nèi)存分靜態(tài)域:static非RAM:硬盤(pán)等永久空間堆內(nèi)存:new創(chuàng)建的對(duì)象和數(shù)組,由Java虛擬機(jī)自動(dòng)回收器管理,存取速度慢1Java堆的結(jié)構(gòu)是什么樣子的?什么是堆中的永久代(PermGen。JVMJVM啟動(dòng)的時(shí)活和的對(duì)象組成的。存活的對(duì)象是應(yīng)用可以的,不會(huì)被回收的對(duì)象是應(yīng)用不可尚且還沒(méi)有被收集器回收掉的對(duì)象。。一直到收集器把這些對(duì)象回收掉之前,他們會(huì)一直占據(jù)堆內(nèi)存空間四:GC是什么?為什么要有記或者錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至,Java提供的GC功能可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過(guò)作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的,Java語(yǔ)言沒(méi)有提供釋放已分配五:簡(jiǎn)述Java回收機(jī)制Java中,程序員是不需要顯示的去釋放一個(gè)對(duì)象的內(nèi)存的,而是由虛擬機(jī)自行執(zhí)行。在JVM中,有一個(gè)回收線程,它是低優(yōu)先級(jí)的,在正常情況下是不會(huì)執(zhí)行的,只有在虛擬機(jī)空閑或者當(dāng)前堆內(nèi)存不足時(shí),才會(huì)觸發(fā)執(zhí)行,掃面那些沒(méi)有被任何的對(duì)象,并將六:如何判斷一個(gè)對(duì)象是否存活?(或者GC對(duì)象的判定所謂就是給每一個(gè)對(duì)象設(shè)置一個(gè)計(jì)數(shù)器每當(dāng)有一個(gè)地方引用這個(gè)對(duì)象時(shí),就將計(jì)數(shù)器加一,失效時(shí),計(jì)數(shù)器就減一。當(dāng)一個(gè)對(duì)象的計(jì)數(shù)器為零時(shí),說(shuō)明此對(duì)象沒(méi)有被,也就是“死對(duì)象”,將會(huì)被回收.有一個(gè)缺陷就是無(wú)法解決循環(huán)問(wèn)題,也就是說(shuō)當(dāng)對(duì)象A對(duì)象B,對(duì)象B又者對(duì)象A,那么此時(shí)A、B對(duì)象的計(jì)數(shù)器都不為零,也就造成無(wú)法完成回收,所以主流可達(dá)性算(鏈法該算法的思想是從一個(gè)被稱(chēng)為GCRoots的對(duì)象開(kāi)始向下搜索,如果一個(gè)對(duì)象到GCRoots沒(méi)有任何鏈相連時(shí),則說(shuō)明此對(duì)象不可用。JavaGCRoots虛擬機(jī)棧中的對(duì)方法區(qū)類(lèi)靜態(tài)屬性的對(duì)方法區(qū)常量池的對(duì)本地方法棧JNI的對(duì)一定會(huì)被回收。當(dāng)一個(gè)對(duì)象不可達(dá)GCRoot時(shí),這個(gè)對(duì)象并不會(huì)立馬被回收,而是出于.GCRoot的鏈,那么此時(shí)就會(huì)被第一次標(biāo)記并且進(jìn)行一次篩選,篩選的條件是是否有必要執(zhí)行finalize()方法。當(dāng)對(duì)象沒(méi)有覆蓋finalize()方法或者已被虛擬機(jī)調(diào)用過(guò),那么就finalize()方法,那么這個(gè)對(duì)象將會(huì)放在一個(gè)稱(chēng)為F-Queue的對(duì)隊(duì)列中,虛擬機(jī)會(huì)觸發(fā)一個(gè)Finalize()線程去執(zhí)行,此線程是低優(yōu)先級(jí)的,finalize()執(zhí)行緩慢或者發(fā)生了死鎖,那么就會(huì)造成F-Queue隊(duì)列一直等待,造成了內(nèi)存回收系統(tǒng)的。GC對(duì)處于F-Queue中的對(duì)象進(jìn)行第二次被標(biāo)記,這時(shí),該對(duì)象將被移除”即將回收”集合,等待回收。七:回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制Java語(yǔ)言中一個(gè)顯著的特點(diǎn)就是引入了回收機(jī)制,使C++程序員最頭疼的內(nèi)存管理的問(wèn)題迎刃而解,它使得Java程序員在編寫(xiě)程序的時(shí)候不再需要考慮內(nèi)存管理。由于有個(gè)回收機(jī)制,Java中的對(duì)象不再有“作用域”的概念,只有對(duì)象的才有"作用域"。回收可以有效的防止內(nèi)存,有效的使用可以使用的內(nèi)存。回收器通常是作為一個(gè)單獨(dú)的低級(jí)別的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)的或者長(zhǎng)時(shí)間沒(méi)有使用的對(duì)象進(jìn)行清楚和回收程序員不能實(shí)時(shí)的調(diào)用回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行回收?;厥諜C(jī)制有分代回收和標(biāo)記回收,增量回收。:八回收器的基本原理是什么?回收器可以馬上回:有什么辦法主動(dòng)通知虛擬機(jī)進(jìn)行回收對(duì)于GC來(lái)說(shuō),當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開(kāi)始這個(gè)對(duì)象的地址、大小以及使用情況。通常,GC(heap)中的所有對(duì)象。通過(guò)這種方式確定哪些對(duì)象是”可達(dá)的”,哪些對(duì)象是”不可達(dá)的”。當(dāng)GC確定一些對(duì)象為“不可達(dá)”時(shí),GC就有責(zé)任回收這些內(nèi)存空間。可以。程序員可System.gc()GCJavaGCJava中會(huì)存在內(nèi)存泄漏嗎,請(qǐng)簡(jiǎn)單描述所謂內(nèi)存就是指一個(gè)不再被程序使用的對(duì)象或變量一直被占據(jù)在內(nèi)存中。Java中有垃圾回收機(jī)制,它可以保證一對(duì)象不再被的時(shí)候,即對(duì)象變成了孤兒的時(shí)候,對(duì)象將自動(dòng)被回收器從內(nèi)存中清除掉。由于Java使用有向圖的方式進(jìn)行回收管理,可以消除循環(huán)的問(wèn)題,例兩個(gè)對(duì)象,相互,只要它們和根進(jìn)程不可達(dá)的,那么GCpublicclassGarbageTest{/*@param*@throws*/publicstaticvoidmain(String[]args)throws{//TODO-generatedmethodstubtry{}catch(IOExceptione)//TODO-generatedcatchblocke.}""outbegingc!={}}privatestaticvoidgcTest()throwsIOException{p1=newp2=new"beforeexitgctest!"}privatestaticclass{byte[]=new mate=publicvoidsetMate({=}}}Java中的內(nèi)存的情況:長(zhǎng)生命周期的對(duì)象持有短生命周期對(duì)象的就很可能發(fā)生內(nèi)不能被回收,這就是Java中內(nèi)存的發(fā)生場(chǎng)景,通俗地說(shuō),就是程序員可能創(chuàng)建了一個(gè)被回收器回收的,這就是java中可能出現(xiàn)內(nèi)存的情況(map對(duì)象中)一直不再使用它,這個(gè)對(duì)象一直被緩存,但卻不再被使用。檢查Java中的內(nèi)存,沒(méi)有,則才能判定這個(gè)對(duì)象屬于內(nèi)存。如果一個(gè)外部類(lèi)的實(shí)例對(duì)象的方法返回了一個(gè)內(nèi)部類(lèi)的實(shí)例對(duì)象,這個(gè)內(nèi)部類(lèi)對(duì)象被長(zhǎng)期了,即使那個(gè)外部類(lèi)實(shí)例對(duì)象不再被造成內(nèi)存。,將那個(gè)元素所在的位置的值設(shè)置為null即可):我實(shí)在想不到比那個(gè)堆棧更經(jīng)典的例子了,以致于我還要?jiǎng)e人的例子,下面的例子不可是那時(shí)我說(shuō)是我自己想到的也沒(méi)有人相信的。publicclassStack{privateObject[]elements=newObject[10];privateintsizepublicvoidpush(Objecte){=e;publicObjectpop(){if(size0)thrownewEmptyStackException();returnelements[-}privatevoidensureCapacity(){Object[]==new*}}}10個(gè)元素,然后全部彈出來(lái),雖然堆棧是空的,沒(méi)有我們要的東西但是這是個(gè)對(duì)象是無(wú)法回收的這個(gè)才符合了內(nèi)存的兩個(gè)條件無(wú)用,但是就是存在這樣的東西也不一定會(huì)導(dǎo)致什么樣的,如果這個(gè)堆棧用的比較少,也就KG了,哪里會(huì)有什么影響,再說(shuō)這個(gè)東西很快就會(huì)被回收的,有什么關(guān)系。下面看兩個(gè)例子。publicclassBad{publicstaticStack=push(newObject());pop()這里有個(gè)對(duì)象發(fā)生內(nèi)存push(newObject())上面的對(duì)象可以被回收了,等于是自}}的Stack最多有100個(gè)對(duì)象,那么最多也就只有100個(gè)對(duì)象無(wú)法被回收其實(shí)這個(gè)應(yīng)該很容易理解,Stack內(nèi)部持有100個(gè),的情況就是他們都是無(wú)用的,因?yàn)槲覀円坏┓判碌倪M(jìn)取,以前的自然內(nèi)存的另外一種情況:當(dāng)一個(gè)對(duì)象被進(jìn)HashSet集合中以后,就不能修改這個(gè)對(duì)象中的那些參與計(jì)算哈希值的字段了,否則,對(duì)象修改后的哈希值與最初進(jìn)HashSetcontains方法使用該對(duì)象的當(dāng)前作為的參數(shù)去HashSet集合中檢索對(duì)象,也將返回找不到對(duì)象的結(jié)果,這也會(huì)導(dǎo)致無(wú)法從HashSet集合中單獨(dú)刪除當(dāng)前對(duì)象,造成內(nèi)存。十:深拷貝和淺拷貝。簡(jiǎn)單來(lái)講就是、克隆p=new“”十一System.gc()Runtime.gc()會(huì)做什么事情這兩個(gè)方法用來(lái)提示JVM要進(jìn)行回收。但是,立即開(kāi)始還是延遲進(jìn)行回收是取決于JVM的。)(finalization)的目的是什么回收器(garbagecolector)finalize()是在Java中很不幸,如果內(nèi)存總是充足的,那么回收可能不會(huì)進(jìn)行,也就是說(shuō)filalize()可能不被執(zhí)行,顯然指望它做收尾工作是靠不住的。finalize()它最主要的用途是回收特殊申請(qǐng)的內(nèi)存。Java程序有回收器,所以一般情況下內(nèi)存問(wèn)題不用程序員操心。但有一種JNI(JavaNativeInterface)調(diào)用non-Java程序(C或C++),finalize()的工作就是回收這部分的內(nèi)存。十三:如果對(duì)象的被置為null,收集器是否會(huì)立即不會(huì),在下一個(gè)回收周期中,這個(gè)對(duì)象將是可被回收的十四:什么是分布式回收(DGC)?它是如何工作的DGC叫做分布式回收。RMI使用DGC來(lái)做自動(dòng)回收。因?yàn)镽MI包含了跨虛擬機(jī)的對(duì)象的,回收是很的。DGC使用計(jì)數(shù)算法來(lái)給對(duì)象提供自的區(qū)別是什么?(100M左右的內(nèi)存)就足十六.在Java中,對(duì)象什么時(shí)候可以被回收十七:簡(jiǎn)述Java內(nèi)存分配與回收策率以及MinorGCMajorGCEden長(zhǎng)期存活的對(duì)象將直接進(jìn)入老年代當(dāng)Eden一次MinorGC。MinorGC通常發(fā)生在的Eden區(qū),在這個(gè)區(qū)的對(duì)象生存期短,往GcFullGC/MajorGC發(fā)生在老年代,一般情況下,觸發(fā)老年代GC的時(shí)候不會(huì)觸發(fā)MinorGC,但是通過(guò)配置,可以在FullGC之前進(jìn)行一次MinorGC這樣可以加快老年代的回收速度。十八:JVM的永久代中會(huì)發(fā)生回收么回收不會(huì)發(fā)生在永久代如果永久代滿了或者是超過(guò)了臨界值會(huì)觸發(fā)完全(Full注:Java8native十九:Java中收集的方法有哪些標(biāo)記-清除:這是收集算法中最基礎(chǔ)的,根據(jù)名字就可以知道,它的思想就是標(biāo)記哪續(xù)內(nèi)存而提前觸發(fā)一次GC動(dòng)作。,算法:為了解決效率問(wèn)題算法將可用內(nèi)存按容量劃分為相等的兩部分,然后每次只使用其中的一塊,當(dāng)一塊內(nèi)存用完時(shí),就將還存活的對(duì)象到第二塊內(nèi)存上,然后一,于是將該算法進(jìn)行了改進(jìn),內(nèi)存區(qū)域不再是按照1:1去劃分,而是將內(nèi)存劃分為8:1:1三EdenSurvior區(qū)。每次都會(huì)優(yōu)先使用Eden區(qū),若Eden區(qū)滿,就將對(duì)象到第二塊內(nèi)存區(qū)上,然后清除Eden區(qū),如果此時(shí)存活的對(duì)象太多,以至于Survivor不夠時(shí),會(huì)將這些對(duì)象通過(guò)分配擔(dān)保機(jī)制到老年代中。(java堆又分為新生代和老年代)--清除,產(chǎn)生大量?jī)?nèi)存碎片的問(wèn)題;當(dāng)對(duì)象存活率較高時(shí),也解決了算法的效率問(wèn)題。它的不同之處就是在清除對(duì)象的時(shí)候現(xiàn)將可回收對(duì)象移動(dòng)到一端,然后清除掉端邊界以外的對(duì)象,這樣就不會(huì)產(chǎn)生內(nèi)存碎片了。分代收集:現(xiàn)在的虛擬機(jī)收集大多采用這種方式,它根據(jù)對(duì)象的生存周期,將堆分為時(shí)就采用算法。老年代里的對(duì)象存活率較高,沒(méi)有額外的空間進(jìn)行分配擔(dān)保二十:什么是類(lèi)加載器,類(lèi)加載器有哪些啟動(dòng)類(lèi)加載器(BootstrapClassLoader)用來(lái)加載Java類(lèi)庫(kù),無(wú)法被Java程序直接擴(kuò)展類(lèi)加載器(extensionsclassloader):它用來(lái)加載Java的擴(kuò)展庫(kù)。Java虛擬機(jī)的實(shí) 。該類(lèi)加載器在此 里面查找并加載Java類(lèi)。類(lèi)。一般來(lái)說(shuō),Javajava.lang.ClassLoader二十一:類(lèi)加載器雙親委派模型機(jī)制內(nèi)存模型以及分區(qū),需要詳細(xì)到每個(gè)區(qū)放什,JVM分為堆區(qū)和棧區(qū),還有方法區(qū),初始化的對(duì)象放在堆里面放在棧里面,class類(lèi)信息常量池(static常量和static變量)new:,方法區(qū):主要是類(lèi)信息,常量池(static常量和static變量),編譯后的代碼(字節(jié)(static的變量),所有的對(duì)象實(shí)例和數(shù)組都要8大基礎(chǔ)類(lèi)型加上一個(gè)應(yīng)用類(lèi)型,所以還是一個(gè)指向地址的指針本地方法棧:主要為Native方法服務(wù)堆里面分為和老生代(java8取消了永久代,采用了Metaspace),包Eden+Survivor區(qū),survivorfromto制算法,從from到to,當(dāng)經(jīng)過(guò)一次或者多次GC之后,存的對(duì)象會(huì)被移,到老年區(qū),當(dāng)JVM內(nèi)存不夠用的時(shí)候,會(huì)觸發(fā)FullGC,清理JVM老年區(qū)當(dāng)新生區(qū)滿了之后會(huì)觸發(fā)YGC,先把存活的對(duì)象放到其中一個(gè)Survice區(qū),然后進(jìn)行清理。因?yàn)槿绻鸈den進(jìn)行完全的清理,然后整理內(nèi)存。那么下次GC的時(shí)候,就會(huì)使用下一個(gè)Survive,這樣循環(huán)使用。如果有特別大的對(duì)象放不下,就會(huì)使用老年代的擔(dān)保,直接放到老年代里面。因?yàn)镴VM認(rèn)為,對(duì)象創(chuàng)建方法,對(duì)象的內(nèi)存分配,對(duì)象的定位newGC的兩種判定方法:指的是如果某個(gè)地方了這個(gè)對(duì)象就+1,如果失效了就-1,當(dāng)為0就會(huì)回收但是JVM沒(méi)有用這種方式,因?yàn)闊o(wú)法判定相互循環(huán)(AB,BA)鏈法:通過(guò)一種GCROOT的對(duì)象(方法區(qū)中靜態(tài)變量的對(duì)象等-static變量)GCROOTGCROOTSafePointGCJavasafepointVMThread才能開(kāi)始執(zhí)行GC,(safepoint,而其他線程在等待它進(jìn)入callGC的三種收集方法:標(biāo)記清除、標(biāo)記整理、算法的原理與特點(diǎn),分別用什么地方,如果讓你優(yōu)化收集方法,有什么思路?先標(biāo)記,標(biāo)記完畢之后再清除,效率不高,會(huì)產(chǎn)生碎片算法:分為8:1的Eden區(qū)和survivorYGC標(biāo)記整理:標(biāo)記完畢之后,讓所有存活的對(duì)象向一端移7:GC收集器有哪些?CMS收集器與G1收集器的特點(diǎn)GC時(shí)服務(wù)有停頓時(shí)間串行收集器:次要回收中使用多線程來(lái)執(zhí)行CMS收集器是基于“標(biāo)記—清除”算法實(shí)現(xiàn)的,經(jīng)過(guò)多次標(biāo)記G1從整體來(lái)看是基于“標(biāo)記—整理”算法實(shí)現(xiàn)的收集器,從局部(兩個(gè)之間)上來(lái)看是基于“”算法實(shí)現(xiàn)MinorGCFullGC分別在什么時(shí)候發(fā)生MGCYGC,JVM幾種常用的內(nèi)存調(diào)試工具jstackjmapjhatdumpmat(eclipse的也要了解一下類(lèi)加載的幾個(gè)過(guò)class對(duì)class文件,包括文件格式校驗(yàn)、元數(shù)據(jù)驗(yàn)證,字節(jié)碼校驗(yàn)11:JVM內(nèi)存分哪幾個(gè)區(qū),每個(gè)區(qū)的作用是什么java虛擬機(jī)主要分為以下一個(gè)區(qū)有時(shí)候也成為永久代,在該區(qū)內(nèi)很少發(fā)生回收,但是并不代表不發(fā)生GC,在這里進(jìn)行的GC主要是對(duì)方法區(qū)里的常量池和對(duì)類(lèi)型的卸載方法區(qū)主要用來(lái)已被虛擬機(jī)加載的類(lèi)的信息、常量、靜態(tài)變量和即時(shí)編譯器編譯后方法區(qū)里有一個(gè)運(yùn)行時(shí)常量池,用于存放靜態(tài)編譯產(chǎn)生的字面量和符號(hào)。該常量池虛擬機(jī)棧虛擬機(jī)棧也就是我們平常所稱(chēng)的棧內(nèi)存,java方法服務(wù),每個(gè)方法在執(zhí)行的時(shí)候都會(huì)創(chuàng)建一個(gè)棧幀,用于局部變量表、操作數(shù)棧、動(dòng)態(tài)和方法出口等信息。局部變量表里的是基本數(shù)據(jù)類(lèi)型、returnAddress類(lèi)型(指向一條字節(jié)碼指令的地址)和對(duì)象,這個(gè)對(duì)象有可能是指向?qū)ο笃鹗嫉刂返囊粋€(gè)指針,也有可能是代表操作數(shù)棧的作用主要用來(lái)運(yùn)算結(jié)果以及運(yùn)算的操作數(shù),它不同于局部變量表通過(guò)索引來(lái),而是壓棧和出棧的方式每個(gè)棧幀都包含一個(gè)指向運(yùn)行時(shí)常量池中該棧幀所屬方法的,持有這個(gè)是為了支持方法調(diào)用過(guò)程中的動(dòng)態(tài)連接.動(dòng)態(tài)就是將常量池中的符號(hào)在運(yùn)行期轉(zhuǎn)化為直接。本地方法棧本地方法棧和虛擬機(jī)棧類(lèi)似,只不過(guò)本地方法棧為Native方法服務(wù)。java堆是所有線程所共享的一塊內(nèi)存,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建,幾乎所有的對(duì)象實(shí)例都在這里創(chuàng)建,因此該區(qū)域經(jīng)常發(fā)生回收操作。javaOOM情況的區(qū)域。如和判斷一個(gè)對(duì)象是否存活?(或者GC對(duì)象的判定方法)判斷一所謂就是給每一個(gè)對(duì)象設(shè)置一個(gè)計(jì)數(shù)器每當(dāng)有一個(gè)地方這個(gè)對(duì)象時(shí),就將計(jì)數(shù)器加一,失效時(shí),計(jì)數(shù)器就減一。當(dāng)一個(gè)對(duì)象的計(jì)數(shù)器為零時(shí),說(shuō)明此對(duì)象沒(méi)有被,也就是“死對(duì)象”,將會(huì)被回收.有一個(gè)缺陷就是無(wú)法解決循環(huán)問(wèn)題,也就是說(shuō)當(dāng)對(duì)象A對(duì)象B,對(duì)象B又者對(duì)象A,那么此時(shí)A,B對(duì)象的計(jì)數(shù)器都不為零,也就造成無(wú)法完成回收,所以主流的虛擬機(jī)都沒(méi)有采用這種可達(dá)性算法(鏈法GCRootsGC沒(méi)有任何鏈相連時(shí),則說(shuō)明此對(duì)象不可用javaGCRoots的對(duì)象有以下幾種虛擬機(jī)棧中的對(duì)方法區(qū)類(lèi)靜態(tài)屬性的對(duì)方法區(qū)常量池的對(duì)本地方法棧JNI的對(duì)會(huì)被回收。當(dāng)一個(gè)對(duì)象不可達(dá)GCRoot時(shí),這個(gè)對(duì)象并不會(huì)立馬被回收,而是出于一個(gè)死緩的階段,若要被真正的回收需要經(jīng)歷兩次標(biāo)記如果對(duì)象在可達(dá)性分析中沒(méi)有與GCRoot的鏈,那么此時(shí)就會(huì)被第一次標(biāo)記并且進(jìn)行一次篩選,篩選的條件是是否有必要執(zhí)行finalize()finalize()方法或者已被虛擬機(jī)調(diào)用過(guò),那么就認(rèn)為是沒(méi)必要finalize()F-QueueFinalize()諾一直等待它運(yùn)行完,這是因?yàn)槿绻鹒inalize()執(zhí)行緩慢或者發(fā)生了死鎖,那么就會(huì)造成FQueue隊(duì)列一直等待,造成了內(nèi)存回收系統(tǒng)的。GC對(duì)處于F-Queue中的對(duì)象進(jìn)行簡(jiǎn)述java回收機(jī)制javaJVM中,有一個(gè)回收線程,它是低優(yōu)先級(jí)的,在正常情況下是不會(huì)執(zhí)行的,只有在虛擬機(jī)空閑或者當(dāng)前堆內(nèi)存不足時(shí),才會(huì)觸發(fā)執(zhí)行,掃面那些沒(méi)有被任何的對(duì)象,并將java中收集的方法有哪些標(biāo)記-清除:這是收集算法中最基礎(chǔ)的,根據(jù)名字就可以知道,它的思想就是標(biāo)記哪些要被回收的對(duì)象,然后統(tǒng)一回收。續(xù)內(nèi)存而提前觸發(fā)一次GC動(dòng)作。2.算法,,1:1去劃分,而是將內(nèi)存劃分為8:1:1三部分,較大那份內(nèi)存交Eden區(qū),其余是兩塊較小的內(nèi)存區(qū)叫Survior區(qū)。每次都會(huì)優(yōu)先使用Eden區(qū),若Eden區(qū)滿,就將對(duì)象到第二塊內(nèi)存區(qū)上,然后清除EdenSurvivor不夠時(shí),會(huì)將這些對(duì)象通過(guò)分配擔(dān)保機(jī)制到老年代中。(java堆又分為和老年代)標(biāo)記-該算法主要是為了解決標(biāo)記-清除,產(chǎn)生大量?jī)?nèi)存碎片的問(wèn)題;當(dāng)對(duì)象存活率較高時(shí),也解決了算法的效率問(wèn)題。它的不同之處就是在清除對(duì)象的時(shí)候現(xiàn)將可回現(xiàn)在的虛擬機(jī)收集大多采用這種方式,它根據(jù)對(duì)象的生存周期,將堆分為新生代和老年代。在中,由于對(duì)象生存期短,每次回收都會(huì)有大量對(duì)象死去,那么這時(shí)就采用算法。老年代里的對(duì)象存活率較高,沒(méi)有額外的空間進(jìn)行分配擔(dān)保,所以可以使用標(biāo)記-整理或者標(biāo)記-清除。java內(nèi)存模java內(nèi)存模型(JMM)是線程間通信的控制機(jī)制.JMM定義了主內(nèi)存和線程之間抽象關(guān)系。線程之間的共享變量在主內(nèi)存(mainmemory)中,每個(gè)線程都有一個(gè)私有的本地內(nèi)存(localmemory),
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)審核審批崗位分工制度
- 落實(shí)落細(xì)制度
- 2025高二英語(yǔ)期末模擬卷01(考試版A4)(人教版)含答案
- 2026福建浦盛產(chǎn)業(yè)發(fā)展集團(tuán)有限公司浦城縣浦恒供應(yīng)鏈有限公司職業(yè)經(jīng)理人招聘?jìng)淇伎荚囶}庫(kù)附答案解析
- 2026貴州省省、市兩級(jí)機(jī)關(guān)遴選公務(wù)員357人備考考試試題附答案解析
- 2026浦發(fā)銀行成都分行支行籌備中心社會(huì)招聘參考考試試題附答案解析
- 2026年中國(guó)科學(xué)院合肥腫瘤醫(yī)院血液透析中心醫(yī)護(hù)人員招聘7名備考考試試題附答案解析
- 2026廣東湛江市吳川市公安局招聘警務(wù)輔助人員32人(第一次)參考考試題庫(kù)附答案解析
- 2026年中國(guó)科學(xué)院合肥腫瘤醫(yī)院血液透析中心醫(yī)護(hù)人員招聘7名參考考試試題附答案解析
- 2026華南理工大學(xué)電力學(xué)院科研助理招聘?jìng)淇伎荚囋囶}附答案解析
- 富士康工廠設(shè)備管理制度
- JG/T 382-2012傳遞窗
- 基于深度學(xué)習(xí)的高精度鏜床參數(shù)優(yōu)化-洞察闡釋
- 供應(yīng)商評(píng)估準(zhǔn)入、管理制度
- 深圳市科學(xué)中學(xué)2023-2024學(xué)年高一(上)期末物理試卷
- 中國(guó)地理:中國(guó)地理空間定位(課件)
- 10kV小區(qū)供配電設(shè)計(jì)、采購(gòu)、施工EPC投標(biāo)技術(shù)方案技術(shù)標(biāo)
- 新人教版七年級(jí)上冊(cè)初中數(shù)學(xué)全冊(cè)教材習(xí)題課件
- 2024-2025學(xué)年湖北省咸寧市高二生物學(xué)上冊(cè)期末達(dá)標(biāo)檢測(cè)試卷及答案
- JTG F40-2004 公路瀝青路面施工技術(shù)規(guī)范
- 三片飲料罐培訓(xùn)
評(píng)論
0/150
提交評(píng)論