成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

在java中如何使用策略模式 如何正確學(xué)會(huì)Java虛擬機(jī)調(diào)優(yōu)?

如何正確學(xué)會(huì)Java虛擬機(jī)調(diào)優(yōu)?一點(diǎn)小經(jīng)驗(yàn)祝你好運(yùn)吧:1)堆運(yùn)行時(shí)數(shù)據(jù)區(qū)域,所有類實(shí)例和數(shù)組的內(nèi)存均從此處分配。Java虛擬機(jī)正常啟動(dòng)時(shí)創(chuàng)建。對(duì)象的堆內(nèi)存由一般稱垃圾回收器的不自動(dòng)內(nèi)存管理系統(tǒng)回收。堆

如何正確學(xué)會(huì)Java虛擬機(jī)調(diào)優(yōu)?

一點(diǎn)小經(jīng)驗(yàn)祝你好運(yùn)吧:

1)堆

運(yùn)行時(shí)數(shù)據(jù)區(qū)域,所有類實(shí)例和數(shù)組的內(nèi)存均從此處分配。Java虛擬機(jī)正常啟動(dòng)時(shí)創(chuàng)建。對(duì)象的堆內(nèi)存由一般稱垃圾回收器的不自動(dòng)內(nèi)存管理系統(tǒng)回收。

堆由兩部分混編:

其中edenfromspacetospace也叫年青代(young),oldspace叫舊生代.

其中有S1,S0(在JDK的那個(gè)軟件工具輸出中會(huì)看到),共有指的是Survivorspace,能保存有時(shí)候垃圾回收后可以生存的對(duì)象.

OldGeneration,通常貯存應(yīng)用程序中生命周期長(zhǎng)的活下來對(duì)象

垃圾回收通常是對(duì)YoungGeneration塊和OldGeneration塊內(nèi)存并且回收,YG單獨(dú)放新出現(xiàn)的對(duì)象,經(jīng)過幾次回收應(yīng)該還沒回收掉的對(duì)象往OG中移動(dòng),

對(duì)YG通過垃圾回收又叫做什么MinorGC,對(duì)OG垃圾回收叫MajorGC,四塊內(nèi)存回收各不相干

2)非堆內(nèi)存

JVM更具一個(gè)由所有線程鏈接共享的方法區(qū)。方法區(qū)一類非堆內(nèi)存。它讀取每個(gè)類結(jié)構(gòu),如不運(yùn)行時(shí)常數(shù)池、字段和方法數(shù)據(jù),包括方法和構(gòu)造方法的代碼。它是在Java虛擬機(jī)起動(dòng)時(shí)創(chuàng)建的。

除此之外方法區(qū)外,Java虛擬機(jī)實(shí)現(xiàn)方法很有可能要作用于內(nèi)部處理或優(yōu)化的內(nèi)存,這種內(nèi)存確實(shí)是非堆內(nèi)存。例如,JIT編譯器不需要內(nèi)存來儲(chǔ)存從Java虛擬機(jī)代碼可以轉(zhuǎn)換飛來的本機(jī)代碼,進(jìn)而額外低性能。

Permanent Generation(圖中的PermanentSpace)貯放JVM自己的反射對(duì)象,諸如類對(duì)象和方法對(duì)象

3)回收算法和過程

JVM區(qū)分一種分代回收(generationalcollection)的策略,用較高的頻率對(duì)二十來歲的對(duì)象(younggeneration)參與掃描和回收,這種叫暗minorcollection,而對(duì)老對(duì)象(oldgeneration)的檢查回收頻率要低比較多,被稱lionscollection。這樣的話就不必須每次來GC都將內(nèi)存中所有對(duì)象都全面檢查一遍。

當(dāng)一個(gè)URL被訪問網(wǎng)絡(luò)時(shí),內(nèi)存申請(qǐng)過程如下:

A.JVM會(huì)根本無法為咨詢Java對(duì)象在Eden中重新初始化一塊內(nèi)存區(qū)域

B.當(dāng)Eden空間足夠時(shí),內(nèi)存去申請(qǐng)已經(jīng)結(jié)束。不然到下一步怎么辦

C.JVM企圖釋放在Eden中所有不重新活躍的對(duì)象(這屬于什么1或更初級(jí)的垃圾回收),釋放后若Eden空間仍然不足以放進(jìn)去新對(duì)象,則趁機(jī)將部分Eden中異常活躍對(duì)象放入Survivor區(qū)D. Survivor區(qū)被用來另外Eden及OLD的中間相互區(qū)域,當(dāng)OLD區(qū)空間足夠時(shí),Survivor區(qū)的對(duì)象會(huì)被移到Old區(qū),否則會(huì)被剩余在Survivor區(qū)

E.當(dāng)OLD區(qū)空間太少時(shí),JVM會(huì)在OLD區(qū)并且已經(jīng)的垃圾收集(0級(jí))

F.完全垃圾收集后,若Survivor及OLD區(qū)仍舊沒能儲(chǔ)存時(shí)從Eden截圖過去的部分對(duì)象,導(dǎo)致JVM根本無法在Eden區(qū)為新對(duì)象修改內(nèi)存區(qū)域,則會(huì)出現(xiàn)”out ofmemory錯(cuò)誤”

對(duì)象衰老的過程

younggeneration的內(nèi)存,由一塊Eden(伊甸園,很好玩)和幾塊Survivor Space(1.4文檔中稱為semi-space)所構(gòu)成。新創(chuàng)建家族的對(duì)象的內(nèi)存都分區(qū)分配自eden。幾塊SurvivorSpace總有會(huì)一大塊是閑時(shí)的,照相顯影劑copyingcollection的目標(biāo)空間。Minorcollection的過程就是將eden和在用survivorspace中的活對(duì)象內(nèi)容復(fù)制到空閑survivorspace中。說白survivor,也就是大部分對(duì)象在伊甸園蛇寶寶后,根本不會(huì)活但是兩次GC。對(duì)象在younggeneration里有過了一定次數(shù)的minorcollection后,年紀(jì)大了,是會(huì)被移到oldgeneration中,稱作tenuring。(有無僅當(dāng)survivorspace不足的時(shí)候才會(huì)將老對(duì)象tenuring?目前資料中是沒有可以找到請(qǐng)看)

剩下的內(nèi)存空間不足會(huì)觸發(fā)時(shí)GC,如eden空間太少了現(xiàn)在就要通過minorcollection,oldgeneration空間太少要接受ti國(guó)際邀請(qǐng)賽collection,permanentgeneration空間下降會(huì)影響到largeGC。

4下一步這部分解說的是TOMCAT或者其他服務(wù)器又出現(xiàn)如下錯(cuò)誤時(shí)的分析:

1、簡(jiǎn)單的方法是:Javaheapspace

解釋:

Heapsize設(shè)置中

JVM堆的設(shè)置是指java程序運(yùn)行過程中JVM可以不調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動(dòng)后的時(shí)候會(huì)手動(dòng)設(shè)置Heapsize的值,其葉綠里空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。是可以借用JVM需要提供的-Xmn-Xms-Xmx等選項(xiàng)可進(jìn)行設(shè)置中。Heapsize的大小是YoungGeneration和TenuredGeneraion之和。

提示:在JVM中假如98%的時(shí)間是用于GC且用些的Heapsize下降2%的時(shí)候?qū)G出此極其信息。

提示:HeapSize大千萬不能超過可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項(xiàng)設(shè)置為不同,而-Xmn為1/4的-Xmx值。

解決方法:

不自動(dòng)設(shè)置中Heapsize

修改TOMCAT_,在“echoUsingCATALINA_BASE:$CATALINA_BASE”上面組建200元以內(nèi)行:

Java代碼

setJAVA_OPTS%JAVA_OPTS%-server-Xms800m-Xmx800m-XX:MaxNewSize256m

setJAVA_OPTS%JAVA_OPTS%-server-Xms800m-Xmx800m-XX:MaxNewSize256m

或改

在“echoUsingCATALINA_BASE:$CATALINA_BASE”上面加入以上行:

JAVA_OPTS$JAVA_OPTS -server -Xms800m-Xmx800m-XX:MaxNewSize256m

2、如果你是是:PermGenspace

原因:

PermGenspace的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,這塊內(nèi)存比較多是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被弄到PermGenspace中,它和貯放類實(shí)例(Instance)的Heap區(qū)域完全不同,GC(Garbage Collection)不可能在主程序運(yùn)行期對(duì)PermGen space接受清理,因?yàn)槿绻皇悄愕膽?yīng)用中有很CLASS的話,就很很有可能再次出現(xiàn)PermGenspace錯(cuò)誤,這種錯(cuò)誤較常見在web服務(wù)器對(duì)JSP并且precompile的時(shí)候。如果不是你的WEBAPP下都用了大量的第三方j(luò)ar,其大小最多了jvm默認(rèn)的大小(4M)這樣的話變會(huì)才能產(chǎn)生此錯(cuò)誤信息了。

解決方法:

1.手動(dòng)啟動(dòng)系統(tǒng)設(shè)置MaxPermSize大小

修改TOMCAT_(Linux下為),在Java代碼

“echoUsingCATALINA_BASE:$CATALINA_BASE”上面組建以上行:

setJAVA_OPTS%JAVA_OPTS%-server-XX:PermSize128M-XX:MaxPermSize512m

“echoUsingCATALINA_BASE:$CATALINA_BASE”上面加入到以上行:

setJAVA_OPTS%JAVA_OPTS%-server-XX:PermSize128M-XX:MaxPermSize512m

下為:

Java代碼

JAVA_OPTS$JAVA_OPTS-server-XX:PermSize128M-XX:MaxPermSize512m

JAVA_OPTS$JAVA_OPTS-server-XX:PermSize128M-XX:MaxPermSize512m

JVM的默認(rèn)設(shè)置

堆(heap)(NewsGeneration和OldGeneraion之和)的設(shè)置

數(shù)碼寶貝傳說分配的內(nèi)存由-Xms指定你,默認(rèn)是物理內(nèi)存的1/64但大于11G。

最大分配的內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4但大于11G。

默認(rèn)空余堆內(nèi)存大于140%時(shí),JVM變會(huì)速度變大堆等他-Xmx的大限制,可以由-XX:MinHeapFreeRatio重新指定。

設(shè)置成空余堆內(nèi)存大于170%時(shí),JVM會(huì)下降堆等他-Xms的最大值限制,可以不由-XX:MaxHeapFreeRatio重新指定。

服務(wù)器就像設(shè)置中-Xms、-Xmx成比例以盡量減少在每次來GC后決定堆的大小,所以才上面的兩個(gè)參數(shù)真沒什么用。

-Xmn設(shè)置younggeneration的heap大小

-XX:MinHeapFreeRatio與-XX:MaxHeapFreeRatio設(shè)置空來內(nèi)存占總內(nèi)存的比例范圍,這兩個(gè)參數(shù)會(huì)影響GC的頻率和單次GC的耗時(shí)。-XX:NewRatio做出決定young與oldgeneration的比例。Younggeneration空間越大,minorcollection頻率越低,可是oldgeneration空間小了,又很可能造成守望先鋒挑戰(zhàn)者系列賽collection頻率減少。-XX:NewSize和-XX:MaxNewSize真接更改了younggeneration的缺省大小和最大大小。

非堆內(nèi)存的設(shè)置

設(shè)置成分配為64M

-XX:PermSize系統(tǒng)設(shè)置最小分配空間,-XX:MaxPermSize系統(tǒng)設(shè)置比較大分配空間。就像把這兩個(gè)數(shù)值設(shè)為相同,以增加去申請(qǐng)內(nèi)存空間的時(shí)間。

再講解和筆記下,JDK下的一些具體看內(nèi)存管理工具的使用:

欄里點(diǎn)jvm內(nèi)存狀態(tài):

jstat-gcutilpid100020

異常狀況的例子

jstat-gcutilpid100020

S0S1EOPYGC YGCT FGC FGCT GCT

0.000.0099.9982.5153.1124091.205101177250.3937251.598

0.000.0083.4282.5553.1024091.205101187252.6507253.855

0.000.0056.0682.4653.1024101.205101207254.4677255.672

0.000.0032.1182.5553.1024111.205101217256.6737257.877

0.000.0099.9982.5553.1024121.205101237257.0267258.231

0.000.0076.0082.5053.1024121.205101247259.2417260.446

這個(gè)數(shù)據(jù)顯示wideGC正常再一次發(fā)生。

正常了情況的例子

S0S1EOPYGC YGCT FGC FGCT GCT

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

參數(shù)含義:

S0:Heap上的Survivorspace0段已在用空間的百分比

S1:Heap上的Survivorspace1段已使用空間的百分比

E:Heap上的Eden space段已在用空間的百分比

O:Heap上的Old space段已不使用空間的百分比

P:Permspace已建議使用空間的百分比

YGC:從程序啟動(dòng)到采樣時(shí)發(fā)生YoungGC的次數(shù)

YGCT:YoungGC所得用時(shí)間(單位秒)

FGC:從程序啟動(dòng)到采樣時(shí)發(fā)生fullGC的次數(shù)

FGCT:largeGC所是用時(shí)間(單位秒)

GCT:應(yīng)用于垃圾回收的總時(shí)間(單位秒)

2Dump出內(nèi)存

2.1得出答案要dump的線程pid

在Linux下,建議使用ps–aux

2.2Dump出內(nèi)存建議使用詳情

是可以通過命令:

jmap-dump:filea.hprofpid

比如:jmap-heap2343,可以看見

AttachingtoprocessID2343,can'twait...

Debuggerattachedsuccessfully.

Servercompilerdetected.

JVMversionnot11.0-b16

usingthread-localobjectallocation.

ParallelGCwith8thread(s)

HeapConfiguration:

MinHeapFreeRatio40

MaxHeapFreeRatio70

MaxHeapSize4294967296(4096.0MB)

NewSize2686976(2.5625MB)

MaxNewSize-65536(-0.0625MB)

OldSize5439488(5.1875MB)

NewRatio2(YG,OG大小比為1:2)

SurvivorRatio8

PermSize21757952(20.75MB)

MaxPermSize 268435456 (256.0MB)

HeapUsage:

PSYoungGeneration

EdenSpace:

capacity1260060672(1201.6875MB)

used64868288(61.86322021484375MB)

go1195192384(1139.8242797851562MB)

5.148028935546367%needed

outsideSpace: capacity 85524480 (81.5625MB)

employed59457648(56.70323181152344MB)

go26066832(24.859268188476562MB)

69.52120375359195%utilized

wantSpace:

capacity85852160(81.875MB)

needed0(0.0MB)

cool85852160(81.875MB)

0.0%utilized

~~~~~~~~~~~~~~~~~~~~~~~~~~這三塊為上面所說的YG大小和可以使用情況

PS Old Generation capacity 2291138560 (2185.0MB)

needed1747845928(1666.8757705688477MB)

cool543292632(518.1242294311523MB)

76.28722062099989%utilized

~~~~~~~~~~~~~~~~~~~~~~~~~~OG大小和使用情況

PS Perm Generation capacity 108265472 (103.25MB)

commonly107650712(102.6637191772461MB)

cool614760(0.5862808227539062MB)

99.43217353728436%employed

jstat

jstat是vm的狀態(tài)監(jiān)控工具,監(jiān)控的內(nèi)容有類加載、正常運(yùn)行時(shí)編譯及GC。

使用時(shí),需加上一欄進(jìn)程的進(jìn)程id,和所選參數(shù)。以下祥細(xì)介紹各個(gè)參數(shù)的意義。

jstat-classpid:顯示加載class的數(shù)量,及所占空間等信息。

jstat-compilerpid:會(huì)顯示VM實(shí)時(shí)動(dòng)態(tài)編譯的數(shù)量等信息。

jstat-gcpid:這個(gè)可以會(huì)顯示gc的信息,欄里點(diǎn)gc的次數(shù),及時(shí)間。其中之后五項(xiàng),各是younggc的次數(shù),younggc的時(shí)間,largegc的次數(shù),largegc的時(shí)間,gc的總時(shí)間。

jstat-gccapacity:是可以不顯示,VM內(nèi)存中三代(young,old,perm)對(duì)象的使用和電腦資源大小,如:PGCMN會(huì)顯示的是小于perm的內(nèi)存建議使用量,PGCMX顯示的是perm的內(nèi)存大可以使用量,PGC是當(dāng)前新生成氣體的perm內(nèi)存占用量,PC是但前perm內(nèi)存占用量。其他的可以依據(jù)這個(gè)以此類推,OC是old內(nèi)純的電腦資源量。

jstat-gcnewpid:future對(duì)象的信息。

jstat-gcnewcapacitypid:fifth對(duì)象的信息非盈利組織會(huì)計(jì)占用量。

jstat-gcoldpid:old對(duì)象的信息。

jstat-gcoldcapacitypid:old對(duì)象的信息教材習(xí)題解答電腦資源量。

jstat-gcpermcapacitypid:perm對(duì)象的信息及其電腦資源量。

jstat-utilpid:統(tǒng)計(jì)gc信息統(tǒng)計(jì)。

jstat-printcompilationpid:當(dāng)前VM想執(zhí)行的信息。

以外以上一個(gè)參數(shù)外,還是可以而而且兩個(gè)數(shù)字,如:jstat-printcompilation30242506是每250毫秒不打印第二次,最少打印出來6次,還是可以另外-h3每三行會(huì)顯示一下標(biāo)題。

例子:

jstat-gcutilpid100020

S0S1EOPYGC YGCT FGC FGCT GCT

47.490.0064.8246.0847.69208222058.6316822.7342081.365

0.0037.9138.5746.1347.69208232058.6916822.7342081.425這里發(fā)生了什么了第二次YGGC,也就是MinorGC,工程浩大0.06s

46.690.0015.1946.1847.69208242058.7766822.7342081.510

46.690.0074.5946.1847.69208242058.7766822.7342081.510

0.0040.2919.9546.2447.69208252058.8486822.7342081.582

MajorGC換算下來時(shí)間:22.734/680.334秒

MinorGC換算下來時(shí)間:2058.691/208230.099秒

powerjob優(yōu)缺點(diǎn)?

PowerJob特點(diǎn):

可以使用簡(jiǎn)單?。禾峁┣岸薟eb界面,不能開發(fā)者可視化地成功調(diào)度任務(wù)的管理(增、刪、改、查)、任務(wù)運(yùn)行狀態(tài)監(jiān)控和運(yùn)行日志打開系統(tǒng)等功能。

設(shè)置定時(shí)策略系統(tǒng)完善:支持什么CRON表達(dá)式、且固定頻率、單獨(dú)計(jì)算網(wǎng)絡(luò)延遲和API四種按時(shí)調(diào)度策略。

負(fù)責(zé)執(zhí)行模式相當(dāng)豐富:允許單機(jī)、廣播、Map、MapReduce四種負(fù)責(zé)執(zhí)行模式,其中Map/MapReduce處理器能使開發(fā)者聊聊無幾數(shù)行代碼便我得到集群分布式計(jì)算的能力。

DAG工作流支持什么:意見免費(fèi)配置任務(wù)依賴性太強(qiáng)關(guān)系,可視化得對(duì)任務(wù)通過編排,同樣還意見上下游任務(wù)間的數(shù)據(jù)傳遞

執(zhí)行器接受廣泛的:意見Spring Bean、內(nèi)置/外置Java類、Shell、Python等處理器,應(yīng)用范圍廣。

運(yùn)維快捷便利:意見網(wǎng)日志功能,執(zhí)行器有一種的日志也可以在前端控制臺(tái)頁面實(shí)時(shí)顯示,減低debug成本,極高地提高開發(fā)效率。

感情依賴系統(tǒng)精簡(jiǎn):大于僅依賴感關(guān)系型數(shù)據(jù)庫(MySQL/Oracle/MSSQLServer...),擴(kuò)大依賴感為MongoDB(主要用于存儲(chǔ)文件龐大無比的在線日志)。

高可用高性能:調(diào)度服務(wù)器當(dāng)經(jīng)過精心設(shè)計(jì),一改其他調(diào)度框架實(shí)現(xiàn)數(shù)據(jù)庫鎖的策略,實(shí)現(xiàn)程序了無鎖化調(diào)度。布署多個(gè)指揮調(diào)度服務(wù)器也可以同樣實(shí)現(xiàn)高可用和性能的提升(接受無窮的的水平存儲(chǔ))。

故障撤回與可以恢復(fù):任務(wù)執(zhí)行失敗后,可據(jù)配置的重試策略成功請(qǐng)重試,只要你執(zhí)行器集群有起碼的計(jì)算節(jié)點(diǎn),任務(wù)就能順利能夠完成。