成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談Sun JVM中的內(nèi)存管理及調(diào)優(yōu)

開發(fā) 后端
本文將介紹Sun JVM的垃圾回收和調(diào)優(yōu),GC即垃圾收集機制是指Sun JVM用于釋放那些不再使用的對象所占用的內(nèi)存。希望本文對大家了解Sun JVM垃圾回收機制有所幫助。

1. Sun JVM的GC概述

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

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

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

1.1. 引用計數(shù)

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

1.2. 對象引用遍歷

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

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

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

2. 幾種垃圾回收機制

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

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

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

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

2.3.復(fù)制收集器

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

2.4.增量收集器

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

2.5.分代收集器

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

2.6.并發(fā)收集器

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

2.7.并行收集器

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

3.Sun HotSpot 1.4.1 Sun JVM堆大小的調(diào)整

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

下面介紹如何控制這些域的大小。可使用-Xms和-Xmx 控制整個堆的原始大小或最大值。

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

java ?Xms128m

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

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

java ?Xms128m ?Xmx128m

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

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

java ?Xms256m ?Xmx256m ?Xmn64m

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

使用-XX:MaxPerSize標(biāo)志來增加永久域的大小。在WebLogic Server應(yīng)用程序加載較多類時,經(jīng)常需要增加永久域的最大值。當(dāng)Sun JVM加載類時,永久域中的對象急劇增加,從而使Sun 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ù)制收集器。該域一般分為三個部分。第一部分為Eden,用于生成新的對象。另兩部分稱為救助空間,當(dāng)Eden充滿時,收集器停止應(yīng)用程序,把所有可到達對象復(fù)制到當(dāng)前的from救助空間,一旦當(dāng)前的from救助空間充滿,收集器則把可到達對象復(fù)制到當(dāng)前的to救助空間。From和to救助空間互換角色。維持活動的對象將在救助空間不斷復(fù)制,直到它們獲得使用期并轉(zhuǎn)入舊域。使用-XX:SurvivorRatio可控制新域子空間的大小。

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

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

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

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

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

4. BEA JRockit Sun JVM的使用

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

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

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

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

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

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

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

4.1.3.并行收集器

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

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

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

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

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

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

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

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

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

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

-XX:PerSize 64m

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

-XX:MaxNewSize 320m

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

-XX: SurvivorRatio 4

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

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

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

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

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

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

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

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

【編輯推薦】

  1. 安裝JDK后JRE與JVM聯(lián)系淺談
  2. 監(jiān)視JSP中JVM可用內(nèi)存
  3. JDK、JRE、JVM之間的關(guān)系
  4. 手把手教你刪除MS JVM的幾種方法
  5. Java虛擬機(JVM)中的內(nèi)存設(shè)置詳解
責(zé)任編輯:彭凡 來源: 51CTO博客
相關(guān)推薦

2023-11-11 19:07:23

JVMJava

2010-09-25 15:52:27

JVM內(nèi)存JVM

2010-09-26 10:53:00

JVM內(nèi)存調(diào)優(yōu)設(shè)置

2023-02-10 09:28:23

優(yōu)化工具

2021-04-28 06:20:59

JVMJavaJVM調(diào)優(yōu)

2012-01-10 14:35:08

JavaJVM

2023-05-29 07:43:32

JVM內(nèi)存調(diào)優(yōu)

2017-07-21 08:55:13

TomcatJVM容器

2020-11-30 11:40:35

NginxLinux性能調(diào)優(yōu)

2020-12-30 15:06:39

開發(fā)技能代碼

2010-09-27 09:23:42

JVM調(diào)優(yōu)

2020-08-10 17:49:25

JVM內(nèi)存溢出

2023-11-10 11:23:20

JVM內(nèi)存

2010-09-26 13:39:46

JVM調(diào)優(yōu)

2010-09-26 09:08:17

JVM調(diào)優(yōu)

2012-01-10 15:13:56

JavaJVM

2010-09-17 14:17:05

JVM內(nèi)存設(shè)置

2023-10-18 08:01:27

Java虛擬機

2019-12-20 14:21:26

JVM調(diào)優(yōu)垃圾回收

2021-06-03 08:32:18

JVM調(diào)優(yōu)虛擬機
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国内久久精品 | 日本三级电影免费观看 | 亚洲香蕉在线视频 | 国产精品亚洲一区二区三区在线观看 | 国产精品女人久久久 | 91免费版在线观看 | 精品亚洲91| 国产91丝袜 | 欧美精品久久久久久久久久 | 欧美成人一区二区三区 | 久久久成人一区二区免费影院 | 99热这里都是精品 | 少妇久久久 | 国产高清视频在线观看 | 妞干网av | 成人免费视频网址 | 亚洲一区二区三区视频 | 久久综合久 | 亚洲视频欧美视频 | 91 在线| 99视频免费在线 | 九九色综合 | 亚洲日韩欧美一区二区在线 | 亚洲欧美综合 | 久久精品手机视频 | 91av视频在线 | 精品一区精品二区 | 亚洲欧洲精品在线 | 日韩av一区二区在线观看 | 一区二区三区精品视频 | 亚洲女人天堂成人av在线 | 国产一区二区三区四区五区3d | www亚洲精品| 国产午夜精品一区二区三区嫩草 | 青青久草 | 日韩乱码一二三 | 日韩久久久久久久久久久 | 成人影院一区二区三区 | 成人av一区| 婷婷久久精品一区二区 | 人人干人人看 |