freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

摩根面試準(zhǔn)備要點-文庫吧

2025-06-08 14:21 本頁面


【正文】 ) generation space),新生區(qū)又分為伊甸園(Eden space),幸存者0區(qū)(Survivor 0 space)和幸存者1區(qū)(Survivor 1 space)。具體分區(qū)如下圖: 那JVM他的這些分區(qū)各有什么用途,請看下面的解說。 永久存儲區(qū)(Permanent Space):永久存儲區(qū)是JVM的駐留內(nèi)存,用于存放JDK自身所攜帶的Class,Interface的元數(shù)據(jù),應(yīng)用服務(wù)器允許必須的Class,Interface的元數(shù)據(jù)和Java程序運行時需要的Class和Interface的元數(shù)據(jù)。被裝載進(jìn)此區(qū)域的數(shù)據(jù)是不會被垃圾回收器回收掉的,關(guān)閉JVM時,釋放此區(qū)域所控制的內(nèi)存。 堆空間(The Heap Space):是JAVA對象生死存亡的地區(qū),JAVA對象的出生,成長,死亡都在這個區(qū)域完成。堆空間又分別按JAVA對象的創(chuàng)建和年齡特征分為養(yǎng)老區(qū)和新生區(qū)。 新生區(qū)(Young (New) generation space):新生區(qū)的作用包括JAVA對象的創(chuàng)建和從JAVA對象中篩選出能進(jìn)入養(yǎng)老區(qū)的JAVA對象。 伊甸園(Eden space):JAVA對空間中的所有對象在此出生,該區(qū)的名字因此而得名。也即是說當(dāng)你的JAVA程序運行時,需要創(chuàng)建新的對象,JVM將在該區(qū)為你創(chuàng)建一個指定的對象供程序使用。創(chuàng)建對象的依據(jù)即是永久存儲區(qū)中的元數(shù)據(jù)。 幸存者0區(qū)(Survivor 0 space)和幸存者1區(qū)(Survivor1 space):當(dāng)伊甸園的空間用完時,程序又需要創(chuàng)建對象;此時JVM的垃圾回收器將對伊甸園區(qū)進(jìn)行垃圾回收,將伊甸園區(qū)中的不再被其他對象所引用的對象進(jìn)行銷毀工作。同時將伊甸園中的還有其他對象引用的對象移動到幸存者0區(qū)。幸存者0區(qū)就是用于存放伊甸園垃圾回收時所幸存下來的JAVA對象。當(dāng)將伊甸園中的還有其他對象引用的對象移動到幸存者0區(qū)時,如果幸存者0區(qū)也沒有空間來存放這些對象時,JVM的垃圾回收器將對幸存者0區(qū)進(jìn)行垃圾回收處理,將幸存者0區(qū)中不在有其他對象引用的JAVA對象進(jìn)行銷毀,將幸存者0區(qū)中還有其他對象引用的對象移動到幸存者1區(qū)。幸存者1區(qū)的作用就是用于存放幸存者0區(qū)垃圾回收處理所幸存下來的JAVA對象。 養(yǎng)老區(qū)(Tenure (Old) generation space):用于保存從新生區(qū)篩選出來的JAVA對象。 上面我們看了JVM的內(nèi)存分區(qū)管理,現(xiàn)在我們來看JVM的垃圾回收工作是怎樣運作的。首先當(dāng)啟動J2EE應(yīng)用服務(wù)器時,JVM隨之啟動,并將JDK的類和接口,應(yīng)用服務(wù)器運行時需要的類和接口以及J2EE應(yīng)用的類和接口定義文件也及編譯后的Class文件或JAR包中的Class文件裝載到JVM的永久存儲區(qū)。在伊甸園中創(chuàng)建JVM,應(yīng)用服務(wù)器運行時必須的JAVA對象,創(chuàng)建J2EE應(yīng)用啟動時必須創(chuàng)建的JAVA對象;J2EE應(yīng)用啟動完畢,可對外提供服務(wù)。 JVM在伊甸園區(qū)根據(jù)用戶的每次請求創(chuàng)建相應(yīng)的JAVA對象,當(dāng)伊甸園的空間不足以用來創(chuàng)建新JAVA對象的時候,JVM的垃圾回收器執(zhí)行對伊甸園區(qū)的垃圾回收工作,銷毀那些不再被其他對象引用的JAVA對象(如果該對象僅僅被一個沒有其他對象引用的對象引用的話,此對象也被歸為沒有存在的必要,依此類推),并將那些被其他對象所引用的JAVA對象移動到幸存者0區(qū)。 如果幸存者0區(qū)有足夠控件存放則直接放到幸存者0區(qū);如果幸存者0區(qū)沒有足夠空間存放,則JVM的垃圾回收器執(zhí)行對幸存者0區(qū)的垃圾回收工作,銷毀那些不再被其他對象引用的JAVA對象(如果該對象僅僅被一個沒有其他對象引用的對象引用的話,此對象也被歸為沒有存在的必要,依此類推),并將那些被其他對象所引用的JAVA對象移動到幸存者1區(qū)。 如果幸存者1區(qū)有足夠控件存放則直接放到幸存者1區(qū);如果幸存者0區(qū)沒有足夠空間存放,則JVM的垃圾回收器執(zhí)行對幸存者0區(qū)的垃圾回收工作,銷毀那些不再被其他對象引用的JAVA對象(如果該對象僅僅被一個沒有其他對象引用的對象引用的話,此對象也被歸為沒有存在的必要,依此類推),并將那些被其他對象所引用的JAVA對象移動到養(yǎng)老區(qū)。 如果養(yǎng)老區(qū)有足夠控件存放則直接放到養(yǎng)老區(qū);如果養(yǎng)老區(qū)沒有足夠空間存放,則JVM的垃圾回收器執(zhí)行對養(yǎng)老區(qū)區(qū)的垃圾回收工作,銷毀那些不再被其他對象引用的JAVA對象(如果該對象僅僅被一個沒有其他對象引用的對象引用的話,此對象也被歸為沒有存在的必要,依此類推),并保留那些被其他對象所引用的JAVA對象。如果到最后養(yǎng)老區(qū),幸存者1區(qū),幸存者0區(qū)和伊甸園區(qū)都沒有空間的話,則JVM會報告“JVM堆空間溢出(: Java heap space)”,也即是在堆空間沒有空間來創(chuàng)建對象。 這就是JVM的內(nèi)存分區(qū)管理,相比不分區(qū)來說;一般情況下,垃圾回收的速度要快很多;因為在沒有必要的時候不用掃描整片內(nèi)存而節(jié)省了大量時間。 通常大家還會遇到另外一種內(nèi)存溢出錯誤“永久存儲區(qū)溢出(: Java Permanent Space)”。所有的垃圾收集算法都面臨同一個問題,那就是找出應(yīng)用程序不可到達(dá)的內(nèi)存塊,將其釋放,這里面得不可到達(dá)主要是指應(yīng)用程序已經(jīng)沒有內(nèi)存塊的引用了,而在JAVA中,某個對象對應(yīng)用程序是可到達(dá)的是指:這個對象被根(根主要是指類的靜態(tài)變量,或者活躍在所有線程棧的對象的引用)引用或者對象被另一個可到達(dá)的對象引用。ReferenceCounting(引用計數(shù)) 引用計數(shù)是最簡單直接的一種方式,這種方式在每一個對象中增加一個引用的計數(shù),這個計數(shù)代表當(dāng)前程序有多少個引用引用了此對象,如果此對象的引用計數(shù)變?yōu)?,那么此對象就可以作為垃圾收集器的目標(biāo)對象來收集。優(yōu)點:簡單,直接,不需要暫停整個應(yīng)用缺點:,編譯器要生成特殊的指令來進(jìn)行引用計數(shù)的操作,比如每次將對象賦值給新的引用,或者者對象的引用超出了作用域等。跟蹤收集器 跟蹤收集器首先要暫停整個應(yīng)用程序,然后開始從根對象掃描整個堆,判斷掃描的對象是否有對象引用,這里面有三個問題需要搞清楚:1.如果每次掃描整個堆,那么勢必讓GC的時間變長,從而影響了應(yīng)用本身的執(zhí)行。因此在JVM里面采用了分代收集,在新生代收集的時候minorgc只需要掃描新生代,而不需要掃描老生代。2.JVM采用了分代收集以后,minorgc只掃描新生代,但是minorgc怎么判斷是否有老生代的對象引用了新生代的對象,JVM采用了卡片標(biāo)記的策略,卡片標(biāo)記將老生代分成了一塊一塊的,劃分以后的每一個塊就叫做一個卡片,JVM采用卡表維護(hù)了每一個塊的狀態(tài),當(dāng)JAVA程序運行的時候,如果發(fā)現(xiàn)老生代對象引用或者釋放了新生代對象的引用,那么就JVM就將卡表的狀態(tài)設(shè)置為臟狀態(tài),這樣每次minorgc的時候就會只掃描被標(biāo)記為臟狀態(tài)的卡片,而不需要掃描整個堆。具體如下圖:3.GC在收集一個對象的時候會判斷是否有引用指向?qū)ο螅贘AVA中的引用主要有四種:Strongreference,Softreference,Weakreference,Phantomreference.216。StrongReference強(qiáng)引用是JAVA中默認(rèn)采用的一種方式,我們平時創(chuàng)建的引用都屬于強(qiáng)引用。如果一個對象沒有強(qiáng)引用,那么對象就會被回收。publicvoidtestStrongReference(){Objectreferent=newObject()。ObjectstrongReference=referent。referent=null。()。assertNotNull(strongReference)。}216。SoftReference軟引用的對象在GC的時候不會被回收,只有當(dāng)內(nèi)存不夠用的時候才會真正的回收,因此軟引用適合緩存的場合,這樣使得緩存中的對象可以盡量的再內(nèi)存中待長久一點。PublicvoidtestSoftReference(){Stringstr=test。SoftReferenceStringsoftreference=newSoftReferenceString(str)。str=null。()。assertNotNull(())。}216。Weakreference弱引用有利于對象更快的被回收,假如一個對象沒有強(qiáng)引用只有弱引用,那么在GC后,這個對象肯定會被回收。PublicvoidtestWeakReference(){Stringstr=test。WeakReferenceStringweakReference=newWeakReferenceString(str)。str=null。()。assertNull(())。}216。PhantomreferenceMarkSweepCollector(標(biāo)記清除收集器) 標(biāo)記清除收集器最早由Lisp的發(fā)明人于1960年提出,標(biāo)記清除收集器停止所有的工作,從根掃描每個活躍的對象,然后標(biāo)記掃描過的對象,標(biāo)記完成以后,清除那些沒有被標(biāo)記的對象。優(yōu)點:1解決循環(huán)引用的問題2不需要編譯器的配合,從而就不執(zhí)行額外的指令缺點:1.每個活躍的對象都要進(jìn)行掃描,收集暫停的時間比較長。CopyingCollector(復(fù)制收集器) 復(fù)制收集器將內(nèi)存分為兩塊一樣大小空間,某一個時刻,只有一個空間處于活躍的狀態(tài),當(dāng)活躍的空間滿的時候,GC就會將活躍的對象復(fù)制到未使用的空間中去,原來不活躍的空間就變?yōu)榱嘶钴S的空間。復(fù)制收集器具體過程可以參考下圖:優(yōu)點:1只掃描可以到達(dá)的對象,不需要掃描所有的對象,從而減少了應(yīng)用暫停的時間缺點:1.需要額外的空間消耗,某一個時刻,總是有一塊內(nèi)存處于未使用狀態(tài)2.復(fù)制對象需要一定的開銷MarkCompactCollector(標(biāo)記整理收集器) 標(biāo)記整理收集器汲取了標(biāo)記清除和復(fù)制收集器的優(yōu)點,它分兩個階段執(zhí)行,在第一個階段,首先掃描所有活躍的對象,并標(biāo)記所有活躍的對象,第二個階段首先清除未標(biāo)記的對象,然后將活躍的的對象復(fù)制到堆得底部。標(biāo)記整理收集器的過程示意圖請參考下圖:Markpact策略極大的減少了內(nèi)存碎片,并且不需要像CopyCollector一樣需要兩倍的空間。JVM的垃圾收集策略 GC的執(zhí)行時要耗費一定的CPU資源和時間的,JVM引入了分代收集的策略,其中對新生代采用MarkCompact策略,而對老生代采用了“MarkSweep的策略。其中新生代的垃圾收集器命名為“minorgc”,老生代的GC命名為FullGc或者M(jìn)ajorGC.()強(qiáng)制執(zhí)行的是FullGc.5. Spring IOC and AOP(Minjin)IoC和AOP都是Spring的核心思想 當(dāng)然,最為一個框架級的輕量組件,大量的配置文件是不可缺少的,但是核心是要把這些配置文件,配置節(jié)組裝起來,并將核心代碼編寫為完全業(yè)務(wù)無關(guān)的。我們看看Spring是怎么做的。 首先,IoC,控制反轉(zhuǎn)。Spring 開發(fā)的基本思想:面向接口的編程模式。框架做的越多,應(yīng)該越能發(fā)現(xiàn)接口在其中起到的作用,而Spring將這種想法,開始貫徹到業(yè)務(wù)的開發(fā)中了。Bean 的Set方法使用接口作為參數(shù),保證其擴(kuò)展性,實現(xiàn)依賴關(guān)系的松偶爾。所謂的控制反轉(zhuǎn),作為中文更好理解的一個翻譯應(yīng)該是依賴注入,把依賴的類采用接口的方式,利用Set函數(shù),傳入Bean的內(nèi)部,實現(xiàn)與外界的解耦合。這種注入也可作用于構(gòu)造函數(shù)。 其次,AOP,面向切面的編程方式,我覺得更通俗的說法應(yīng)該是對容器內(nèi)的Bean進(jìn)行方法干涉。被容器中創(chuàng)建的類,看起來執(zhí)行一個普通的函數(shù)調(diào)用,因為被容器預(yù)處理,而會在方法執(zhí)行前/后進(jìn)行一些其他的、可配置的操作。當(dāng)然,這種方法也同樣是面向接口的,或者直接使用反射的。下面是轉(zhuǎn)載的一個簡單示例。 Java代碼 import import import publicclassDynaProxyHelloimplementsInvocationHandler{ privateObjectproxy。 privateObjectdelegate。 publicObjectbind(Objectdelegate,Objectproxy){ =proxy。 =delegate。 return( ().getClassLoader(), .getClass().getInterfaces(),this)。 publicObjectinvoke(Objectproxy,Methodmethod,Object[]args) throwsThrowable{ Objectresult=null。 try{ //反射得到操作者的實例 Classclazz=()。 //反射得到操作者的Start方法16
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1