内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

簡(jiǎn)單Java回收代碼 java 回收算法

java中是怎樣進(jìn)行垃圾回收的?

前面是我自己理解的后面是復(fù)制的

創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶提供超值的營(yíng)銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營(yíng)銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個(gè)人等客戶提供了網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

java中垃圾回收以前聽老師講好像是內(nèi)存滿了他才去做一次整體垃圾回收,在回收垃圾的同時(shí)會(huì)調(diào)用finalize方法.你在構(gòu)造一個(gè)類時(shí)可以構(gòu)造一個(gè)類時(shí)覆蓋他的finalize方法以便于該類在被垃圾回收時(shí)執(zhí)行一些代碼,比如釋放資源.

1.JVM的gc概述

gc即垃圾收集機(jī)制是指jvm用于釋放那些不再使用的對(duì)象所占用的內(nèi)存。java語(yǔ)言并不要求jvm有g(shù)c,也沒有規(guī)定gc如何工作。不過常用的jvm都有g(shù)c,而且大多數(shù)gc都使用類似的算法管理內(nèi)存和執(zhí)行收集操作。

在充分理解了垃圾收集算法和執(zhí)行過程后,才能有效的優(yōu)化它的性能。有些垃圾收集專用于特殊的應(yīng)用程序。比如,實(shí)時(shí)應(yīng)用程序主要是為了避免垃圾收集中斷,而大多數(shù)OLTP應(yīng)用程序則注重整體效率。理解了應(yīng)用程序的工作負(fù)荷和jvm支持的垃圾收集算法,便可以進(jìn)行優(yōu)化配置垃圾收集器。

垃圾收集的目的在于清除不再使用的對(duì)象。gc通過確定對(duì)象是否被活動(dòng)對(duì)象引用來確定是否收集該對(duì)象。gc首先要判斷該對(duì)象是否是時(shí)候可以收集。兩種常用的方法是引用計(jì)數(shù)和對(duì)象引用遍歷。

1.1.引用計(jì)數(shù)

引用計(jì)數(shù)存儲(chǔ)對(duì)特定對(duì)象的所有引用數(shù),也就是說,當(dāng)應(yīng)用程序創(chuàng)建引用以及引用超出范圍時(shí),jvm必須適當(dāng)增減引用數(shù)。當(dāng)某對(duì)象的引用數(shù)為0時(shí),便可以進(jìn)行垃圾收集。

1.2.對(duì)象引用遍歷

早期的jvm使用引用計(jì)數(shù),現(xiàn)在大多數(shù)jvm采用對(duì)象引用遍歷。對(duì)象引用遍歷從一組對(duì)象開始,沿著整個(gè)對(duì)象圖上的每條鏈接,遞歸確定可到達(dá)(reachable)的對(duì)象。如果某對(duì)象不能從這些根對(duì)象的一個(gè)(至少一個(gè))到達(dá),則將它作為垃圾收集。在對(duì)象遍歷階段,gc必須記住哪些對(duì)象可以到達(dá),以便刪除不可到達(dá)的對(duì)象,這稱為標(biāo)記(marking)對(duì)象。

下一步,gc要?jiǎng)h除不可到達(dá)的對(duì)象。刪除時(shí),有些gc只是簡(jiǎn)單的掃描堆棧,刪除未標(biāo)記的未標(biāo)記的對(duì)象,并釋放它們的內(nèi)存以生成新的對(duì)象,這叫做清除(sweeping)。這種方法的問題在于內(nèi)存會(huì)分成好多小段,而它們不足以用于新的對(duì)象,但是組合起來卻很大。因此,許多gc可以重新組織內(nèi)存中的對(duì)象,并進(jìn)行壓縮(compact),形成可利用的空間。

為此,gc需要停止其他的活動(dòng)活動(dòng)。這種方法意味著所有與應(yīng)用程序相關(guān)的工作停止,只有g(shù)c運(yùn)行。結(jié)果,在響應(yīng)期間增減了許多混雜請(qǐng)求。另外,更復(fù)雜的 gc不斷增加或同時(shí)運(yùn)行以減少或者清除應(yīng)用程序的中斷。有的gc使用單線程完成這項(xiàng)工作,有的則采用多線程以增加效率。

2.幾種垃圾回收機(jī)制

2.1.標(biāo)記-清除收集器

這種收集器首先遍歷對(duì)象圖并標(biāo)記可到達(dá)的對(duì)象,然后掃描堆棧以尋找未標(biāo)記對(duì)象并釋放它們的內(nèi)存。這種收集器一般使用單線程工作并停止其他操作。

2.2.標(biāo)記-壓縮收集器

有時(shí)也叫標(biāo)記-清除-壓縮收集器,與標(biāo)記-清除收集器有相同的標(biāo)記階段。在第二階段,則把標(biāo)記對(duì)象復(fù)制到堆棧的新域中以便壓縮堆棧。這種收集器也停止其他操作。

2.3.復(fù)制收集器

這種收集器將堆棧分為兩個(gè)域,常稱為半空間。每次僅使用一半的空間,jvm生成的新對(duì)象則放在另一半空間中。gc運(yùn)行時(shí),它把可到達(dá)對(duì)象復(fù)制到另一半空間,從而壓縮了堆棧。這種方法適用于短生存期的對(duì)象,持續(xù)復(fù)制長(zhǎng)生存期的對(duì)象則導(dǎo)致效率降低。

2.4.增量收集器

增量收集器把堆棧分為多個(gè)域,每次僅從一個(gè)域收集垃圾。這會(huì)造成較小的應(yīng)用程序中斷。

2.5.分代收集器

這種收集器把堆棧分為兩個(gè)或多個(gè)域,用以存放不同壽命的對(duì)象。jvm生成的新對(duì)象一般放在其中的某個(gè)域中。過一段時(shí)間,繼續(xù)存在的對(duì)象將獲得使用期并轉(zhuǎn)入更長(zhǎng)壽命的域中。分代收集器對(duì)不同的域使用不同的算法以優(yōu)化性能。

2.6.并發(fā)收集器

并發(fā)收集器與應(yīng)用程序同時(shí)運(yùn)行。這些收集器在某點(diǎn)上(比如壓縮時(shí))一般都不得不停止其他操作以完成特定的任務(wù),但是因?yàn)槠渌麘?yīng)用程序可進(jìn)行其他的后臺(tái)操作,所以中斷其他處理的實(shí)際時(shí)間大大降低。

2.7.并行收集器

并行收集器使用某種傳統(tǒng)的算法并使用多線程并行的執(zhí)行它們的工作。在多cpu機(jī)器上使用多線程技術(shù)可以顯著的提高java應(yīng)用程序的可擴(kuò)展性。

3.Sun HotSpot

1.4.1 JVM堆大小的調(diào)整

Sun HotSpot 1.4.1使用分代收集器,它把堆分為三個(gè)主要的域:新域、舊域以及永久域。Jvm生成的所有新對(duì)象放在新域中。一旦對(duì)象經(jīng)歷了一定數(shù)量的垃圾收集循環(huán)后,便獲得使用期并進(jìn)入舊域。在永久域中jvm則存儲(chǔ)class和method對(duì)象。就配置而言,永久域是一個(gè)獨(dú)立域并且不認(rèn)為是堆的一部分。

下面介紹如何控制這些域的大小??墒褂?Xms和-Xmx 控制整個(gè)堆的原始大小或最大值。

下面的命令是把初始大小設(shè)置為128M:

java –Xms128m

–Xmx256m為控制新域的大小,可使用-XX:NewRatio設(shè)置新域在堆中所占的比例。

下面的命令把整個(gè)堆設(shè)置成128m,新域比率設(shè)置成3,即新域與舊域比例為1:3,新域?yàn)槎训?/4或32M:

java –Xms128m –Xmx128m

–XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize設(shè)置新域的初始值和最大值。

下面的命令把新域的初始值和最大值設(shè)置成64m:

java –Xms256m –Xmx256m –Xmn64m

永久域默認(rèn)大小為4m。運(yùn)行程序時(shí),jvm會(huì)調(diào)整永久域的大小以滿足需要。每次調(diào)整時(shí),jvm會(huì)對(duì)堆進(jìn)行一次完全的垃圾收集。

使用-XX:MaxPerSize標(biāo)志來增加永久域搭大小。在WebLogic Server應(yīng)用程序加載較多類時(shí),經(jīng)常需要增加永久域的最大值。當(dāng)jvm加載類時(shí),永久域中的對(duì)象急劇增加,從而使jvm不斷調(diào)整永久域大小。為了避免調(diào)整,可使用-XX:PerSize標(biāo)志設(shè)置初始值。

下面把永久域初始值設(shè)置成32m,最大值設(shè)置成64m。

java -Xms512m -Xmx512m -Xmn128m -XX:PermSize=32m -XX:MaxPermSize=64m

默認(rèn)狀態(tài)下,HotSpot在新域中使用復(fù)制收集器。該域一般分為三個(gè)部分。第一部分為Eden,用于生成新的對(duì)象。另兩部分稱為救助空間,當(dāng)Eden 充滿時(shí),收集器停止應(yīng)用程序,把所有可到達(dá)對(duì)象復(fù)制到當(dāng)前的from救助空間,一旦當(dāng)前的from救助空間充滿,收集器則把可到達(dá)對(duì)象復(fù)制到當(dāng)前的to救助空間。From和to救助空間互換角色。維持活動(dòng)的對(duì)象將在救助空間不斷復(fù)制,直到它們獲得使用期并轉(zhuǎn)入舊域。使用-XX:SurvivorRatio 可控制新域子空間的大小。

同NewRation一樣,SurvivorRation規(guī)定某救助域與Eden空間的比值。比如,以下命令把新域設(shè)置成64m,Eden占32m,每個(gè)救助域各占16m:

java -Xms256m -Xmx256m -Xmn64m -XX:SurvivorRation =2

如前所述,默認(rèn)狀態(tài)下HotSpot對(duì)新域使用復(fù)制收集器,對(duì)舊域使用標(biāo)記-清除-壓縮收集器。在新域中使用復(fù)制收集器有很多意義,因?yàn)閼?yīng)用程序生成的大部分對(duì)象是短壽命的。理想狀態(tài)下,所有過渡對(duì)象在移出Eden空間時(shí)將被收集。如果能夠這樣的話,并且移出Eden空間的對(duì)象是長(zhǎng)壽命的,那么理論上可以立即把它們移進(jìn)舊域,避免在救助空間反復(fù)復(fù)制。但是,應(yīng)用程序不能適合這種理想狀態(tài),因?yàn)樗鼈冇幸恍〔糠种虚L(zhǎng)壽命的對(duì)象。最好是保持這些中長(zhǎng)壽命的對(duì)象并放在新域中,因?yàn)閺?fù)制小部分的對(duì)象總比壓縮舊域廉價(jià)。為控制新域中對(duì)象的復(fù)制,可用-XX:TargetSurvivorRatio控制救助空間的比例(該值是設(shè)置救助空間的使用比例。如救助空間位1M,該值50表示可用500K)。該值是一個(gè)百分比,默認(rèn)值是50。當(dāng)較大的堆棧使用較低的 sruvivorratio時(shí),應(yīng)增加該值到80至90,以更好利用救助空間。用-XX:maxtenuring threshold可控制上限。

為放置所有的復(fù)制全部發(fā)生以及希望對(duì)象從eden擴(kuò)展到舊域,可以把MaxTenuring Threshold設(shè)置成0。設(shè)置完成后,實(shí)際上就不再使用救助空間了,因此應(yīng)把SurvivorRatio設(shè)成最大值以最大化Eden空間,設(shè)置如下:

java … -XX:MaxTenuringThreshold=0 –XX:SurvivorRatio=50000 …

4.BEA JRockit JVM的使用

Bea WebLogic 8.1使用的新的JVM用于Intel平臺(tái)。在Bea安裝完畢的目錄下可以看到有一個(gè)類似于jrockit81sp1_141_03的文件夾。這就是 Bea新JVM所在目錄。不同于HotSpot把Java字節(jié)碼編譯成本地碼,它預(yù)先編譯成類。JRockit還提供了更細(xì)致的功能用以觀察JVM的運(yùn)行狀態(tài),主要是獨(dú)立的GUI控制臺(tái)(只能適用于使用Jrockit才能使用jrockit81sp1_141_03自帶的console監(jiān)控一些cpu及 memory參數(shù))或者WebLogic Server控制臺(tái)。

Bea JRockit JVM支持4種垃圾收集器:

4.1.1.分代復(fù)制收集器

它與默認(rèn)的分代收集器工作策略類似。對(duì)象在新域中分配,即JRockit文檔中的nursery。這種收集器最適合單cpu機(jī)上小型堆操作。

4.1.2.單空間并發(fā)收集器

該收集器使用完整堆,并與背景線程共同工作。盡管這種收集器可以消除中斷,但是收集器需花費(fèi)較長(zhǎng)的時(shí)間尋找死對(duì)象,而且處理應(yīng)用程序時(shí)收集器經(jīng)常運(yùn)行。如果處理器不能應(yīng)付應(yīng)用程序產(chǎn)生的垃圾,它會(huì)中斷應(yīng)用程序并關(guān)閉收集。

分代并發(fā)收集器這種收集器在護(hù)理域使用排它復(fù)制收集器,在舊域中則使用并發(fā)收集器。由于它比單空間共同發(fā)生收集器中斷頻繁,因此它需要較少的內(nèi)存,應(yīng)用程序的運(yùn)行效率也較高,注意,過小的護(hù)理域可以導(dǎo)致大量的臨時(shí)對(duì)象被擴(kuò)展到舊域中。這會(huì)造成收集器超負(fù)荷運(yùn)作,甚至采用排它性工作方式完成收集。

4.1.3.并行收集器

該收集器也停止其他進(jìn)程的工作,但使用多線程以加速收集進(jìn)程。盡管它比其他的收集器易于引起長(zhǎng)時(shí)間的中斷,但一般能更好的利用內(nèi)存,程序效率也較高。

默認(rèn)狀態(tài)下,JRockit使用分代并發(fā)收集器。要改變收集器,可使用-Xgc:,對(duì)應(yīng)四個(gè)收集器分別為 gencopy,singlecon,gencon以及parallel。可使用-Xms和-Xmx設(shè)置堆的初始大小和最大值。要設(shè)置護(hù)理域,則使用- Xns:java –jrockit –Xms512m –Xmx512m –Xgc:gencon –Xns128m…盡管JRockit支持-verbose:gc開關(guān),但它輸出的信息會(huì)因收集器的不同而異。JRockit還支持memory、 load和codegen的輸出。

注意 :如果 使用JRockit JVM的話還可以使用WLS自帶的console(C:\bea\jrockit81sp1_141_03\bin下)來監(jiān)控一些數(shù)據(jù),如cpu, memery等。要想能構(gòu)監(jiān)控必須在啟動(dòng)服務(wù)時(shí)startWeblogic.cmd中加入-Xmanagement參數(shù)。

5.如何從JVM中獲取信息來進(jìn)行調(diào)整

-verbose.gc開關(guān)可顯示gc的操作內(nèi)容。打開它,可以顯示最忙和最空閑收集行為發(fā)生的時(shí)間、收集前后的內(nèi)存大小、收集需要的時(shí)間等。打開- xx:+ printgcdetails開關(guān),可以詳細(xì)了解gc中的變化。打開-XX: + PrintGCTimeStamps開關(guān),可以了解這些垃圾收集發(fā)生的時(shí)間,自jvm啟動(dòng)以后以秒計(jì)量。最后,通過-xx: + PrintHeapAtGC開關(guān)了解堆的更詳細(xì)的信息。為了了解新域的情況,可以通過-XX:=PrintTenuringDistribution開關(guān)了解獲得使用期的對(duì)象權(quán)。

6.Pdm系統(tǒng)JVM調(diào)整

6.1.服務(wù)器:前提內(nèi)存1G 單CPU

可通過如下參數(shù)進(jìn)行調(diào)整:-server 啟用服務(wù)器模式(如果CPU多,服務(wù)器機(jī)建議使用此項(xiàng))

-Xms,-Xmx一般設(shè)為同樣大小。 800m

-Xmn 是將NewSize與MaxNewSize設(shè)為一致。320m

-XX:PerSize 64m

-XX:NewSize 320m 此值設(shè)大可調(diào)大新對(duì)象區(qū),減少Full GC次數(shù)

-XX:MaxNewSize 320m

-XX:NewRato NewSize設(shè)了可不設(shè)。

-XX: SurvivorRatio

-XX:userParNewGC 可用來設(shè)置并行收集

-XX:ParallelGCThreads 可用來增加并行度

-XXUseParallelGC 設(shè)置后可以使用并行清除收集器

-XX:UseAdaptiveSizePolicy 與上面一個(gè)聯(lián)合使用效果更好,利用它可以自動(dòng)優(yōu)化新域大小以及救助空間比值

6.2.客戶機(jī):通過在JNLP文件中設(shè)置參數(shù)來調(diào)整客戶端JVM

JNLP中參數(shù):initial-heap-size和max-heap-size

這可以在framework的RequestManager中生成JNLP文件時(shí)加入上述參數(shù),但是這些值是要求根據(jù)客戶機(jī)的硬件狀態(tài)變化的(如客戶機(jī)的內(nèi)存大小等)。建議這兩個(gè)參數(shù)值設(shè)為客戶機(jī)可用內(nèi)存的60%(有待測(cè)試)。為了在動(dòng)態(tài)生成JNLP時(shí)以上兩個(gè)參數(shù)值能夠隨客戶機(jī)不同而不同,可靠慮獲得客戶機(jī)系統(tǒng)信息并將這些嵌到首頁(yè)index.jsp中作為連接請(qǐng)求的參數(shù)。

在設(shè)置了上述參數(shù)后可以通過Visualgc 來觀察垃圾回收的一些參數(shù)狀態(tài),再做相應(yīng)的調(diào)整來改善性能。一般的標(biāo)準(zhǔn)是減少fullgc的次數(shù),最好硬件支持使用并行垃圾回收(要求多CPU)。

我用java創(chuàng)建了一個(gè)類,如何回收這個(gè)類??不要讓它占用內(nèi)存,是否需要像c語(yǔ)言一樣在代碼中加入回收函數(shù)

糾正下你的說法.一個(gè)類是不會(huì)無緣無故運(yùn)行的,所以談不上占用內(nèi)存,更沒有回收.你問的應(yīng)該是使用一個(gè)類創(chuàng)建了一個(gè)對(duì)象,如何回收該對(duì)象所占的內(nèi)存空間?

例如有一個(gè)Person類,我們創(chuàng)建他的一個(gè)對(duì)象,一般是如下:

Person mPerson = new Person();

這個(gè)時(shí)候情況是,在棧內(nèi)存中標(biāo)記了一個(gè)名字叫mPerson的空間,它存儲(chǔ)了一個(gè)關(guān)于某塊內(nèi)存區(qū)域位置的信息,說白了,就是你使用new Person();創(chuàng)建出來的對(duì)象的位置,我們稱mPerson為Person對(duì)象的一個(gè)引用。這個(gè)對(duì)象位于堆內(nèi)存,它是有默認(rèn)值的,必須占內(nèi)存一部分空間,想使用的時(shí)候,可以通過mPerson找到它。當(dāng)你把mPerson賦值為null后,你那個(gè)對(duì)象就沒有引用了,這個(gè)時(shí)候,你的JVM會(huì)在適當(dāng)?shù)臅r(shí)候自動(dòng)去回收掉Person的對(duì)象。

不知道說明白了沒有。

java回收機(jī)制:testa(){byte[] a=new byte[(int) 1000]; testb(a); a=null;} 請(qǐng)問a變量的內(nèi)存變釋放嗎?

在a=null;這一刻,是沒有回收的。

首先,java是沒有法用程序代碼來釋放內(nèi)存的。就算你調(diào)用了object的finalize()和Runtime的gc(),都是無法在調(diào)用那一刻后就釋放內(nèi)存的。內(nèi)存的釋放是JVM來做的,sun在設(shè)計(jì)的時(shí)候就不允許用java代碼來釋放內(nèi)存。

在一個(gè)普通的java application中,至少有mian線程和gc線程。gc線程就是不斷的來查看當(dāng)前有哪些變量沒有使用了,需要回收,就通知JVM,該回收了。注意,僅僅是通知,而不是調(diào)用執(zhí)行。

這是finalize()給出的API:

Called by the garbage collector on an object when garbage collection

determines that there are no more references to the object

這是gc()方法給出的API

The virtual machine performs this recycling

process automatically as needed, in a separate thread, even if the

gc method is not invoked explicitly.

關(guān)于java垃圾回收,不懂?

垃圾回收機(jī)制是JAVA一個(gè)清理自動(dòng)內(nèi)存的機(jī)制。就是把沒用的對(duì)象清理出內(nèi)存。

因?yàn)樗且粋€(gè)自動(dòng)的過程,所有我們不需要手動(dòng)清理了,當(dāng)然,我們也不能控制它的執(zhí)行。

給你舉個(gè)例子,大街上好多垃圾桶,只要是你把垃圾扔里面了,就會(huì)有人來清理,當(dāng)然,人什么時(shí)候清理你管不著。

本文題目:簡(jiǎn)單Java回收代碼 java 回收算法
URL網(wǎng)址:http://www.rwnh.cn/article22/dosiijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、自適應(yīng)網(wǎng)站、網(wǎng)站制作、云服務(wù)器、動(dòng)態(tài)網(wǎng)站、靜態(tài)網(wǎng)站

廣告

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

成都seo排名網(wǎng)站優(yōu)化
丹阳市| 棋牌| 尼勒克县| 枞阳县| 金平| 安丘市| 吉林市| 高尔夫| 芦溪县| 崇仁县| 祥云县| 龙门县| 双鸭山市| 宁乡县| 永定县| 定边县| 宝山区| 临沭县| 休宁县| 黄大仙区| 定州市| 嵊泗县| 赤城县| 龙陵县| 镇巴县| 平度市| 广河县| 清远市| 嵊泗县| 游戏| 象山县| 祁东县| 普格县| 通州市| 如皋市| 通海县| 彝良县| 郓城县| 措勤县| 马公市| 鲜城|