欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Java的垃圾回收機制詳解和調優(yōu) --燎原





1.JVM的gc概述

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

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

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

  1.1.引用計數

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

  1.2.對象引用遍歷

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

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

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

  2.幾種垃圾回收機制

  2.1.標記-清除收集器

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

  2.2.標記-壓縮收集器

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

  2.3.復制收集器

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

  2.4.增量收集器

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

  2.5.分代收集器

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

  2.6.并發(fā)收集器

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

  2.7.并行收集器

  并行收集器使用某種傳統的算法并使用多線(xiàn)程并行的執行它們的工作。在多cpu機器上使用多線(xiàn)程技術(shù)可以顯著(zhù)的提高java應用程序的可擴展性。

  3.Sun HotSpot

  1.4.1 JVM堆大小的調整

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

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

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

  java –Xms128m

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

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

java –Xms128m –Xmx128m
–XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize設置新域的初始值和最大值。

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

java –Xms256m –Xmx256m –Xmn64m

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

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

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

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

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

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

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

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

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

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

  4.BEA JRockit JVM的使用

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

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

  4.1.1.分代復制收集器

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

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

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

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

  4.1.3.并行收集器

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

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

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

  5.如何從JVM中獲取信息來(lái)進(jìn)行調整

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

  6.Pdm系統JVM調整

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

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

 ?。璛ms,-Xmx一般設為同樣大小。 800m

 ?。璛mn 是將NewSize與MaxNewSize設為一致。320m

 ?。璛X:PerSize 64m

 ?。璛X:NewSize 320m 此值設大可調大新對象區,減少Full GC次數

 ?。璛X:MaxNewSize 320m

 ?。璛X:NewRato NewSize設了可不設。

 ?。璛X: SurvivorRatio

 ?。璛X:userParNewGC 可用來(lái)設置并行收集

 ?。璛X:ParallelGCThreads 可用來(lái)增加并行度

 ?。璛XUseParallelGC 設置后可以使用并行清除收集器

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

  6.2.客戶(hù)機:通過(guò)在JNLP文件中設置參數來(lái)調整客戶(hù)端JVM

  JNLP中參數:initial-heap-size和max-heap-size

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

  在設置了上述參數后可以通過(guò)Visualgc 來(lái)觀(guān)察垃圾回收的一些參數狀態(tài),再做相應的調整來(lái)改善性能。一般的標準是減少fullgc的次數,最好硬件支持使用并行垃圾

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java的垃圾回收機制詳解和調優(yōu)大 - 日志 - 肖波 - Talentdigger - ...
消除內存泄漏
JVM內存模型與性能調優(yōu)
深入Java核心 探秘Java垃圾回收機制
內存泄漏,走開(kāi)
深入探究JVM(2)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久