智能運(yùn)營(yíng)助手參數(shù)調(diào)優(yōu)配置-jvm_第1頁(yè)
智能運(yùn)營(yíng)助手參數(shù)調(diào)優(yōu)配置-jvm_第2頁(yè)
智能運(yùn)營(yíng)助手參數(shù)調(diào)優(yōu)配置-jvm_第3頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

JVM參數(shù)調(diào)優(yōu)與回收機(jī)自動(dòng)內(nèi)存管理機(jī)Java所謂虛擬機(jī),就是一臺(tái)虛擬的機(jī)器。他是一款軟件,用來(lái)執(zhí)行一系列虛擬計(jì)算指令,大體上虛擬機(jī)可以分系統(tǒng)虛擬機(jī)和程序虛擬機(jī)名鼎鼎的VisualBox、Vmare就屬于系統(tǒng)虛擬機(jī),他們完全是對(duì)物理計(jì)算的仿真,Java發(fā)展至今,出現(xiàn)過(guò)很多虛擬機(jī),做初Sun使用的一款叫ClassIc的Java虛擬機(jī),到現(xiàn)在最廣泛的是HotSpot虛擬Java1、類加載子系統(tǒng):負(fù)責(zé)從文件系統(tǒng)或者網(wǎng)絡(luò)加載Class信息,加載的信息存放在一塊稱之方法區(qū)的內(nèi)存空2、方法區(qū):就是存放類的信息、常量信息、常量池信息、包括字符串字面量和數(shù)字常量等3、Java堆:在Java虛擬機(jī)啟動(dòng)的時(shí)候建立Java堆,它是Java程序最主要的內(nèi)存工作區(qū)域,幾乎所有的對(duì)象實(shí)例都存放到4、直接內(nèi)存:JavaNio庫(kù)允許Java程序直接內(nèi)存,從而提高性能,通常直接內(nèi)存速度會(huì)優(yōu)于Java堆。讀寫(xiě)頻繁的場(chǎng)合可能會(huì)考慮使用5、每個(gè)虛擬機(jī)線程都有一個(gè)私有棧,一個(gè)線程的Java棧程創(chuàng)建的時(shí)候被創(chuàng)建,Java棧保存著局部變量、方法參數(shù)、同事Java的方法調(diào)用、6、本地方法棧,最大不同為本地方法棧用于本地方法調(diào)用。Java虛擬機(jī)允許Java直接調(diào)用本地方法(通過(guò)使用C語(yǔ)言寫(xiě)7、收集系統(tǒng)是Java的,也是不可少的,Java有一套自己進(jìn)行清理的機(jī)制,開(kāi)發(fā)人員無(wú)需手工清理,下一節(jié)課詳細(xì)講8、PC(ProgramCouneter)寄存器也是每個(gè)線程私有的空間Java虛擬機(jī)會(huì)為每個(gè)線程創(chuàng)建PC寄存器,在任意時(shí)刻一個(gè)Java線程總是在執(zhí)行一個(gè)方法,這個(gè)方法稱為當(dāng)前方法,如果當(dāng)前方法不是本地方法,PC寄存器總會(huì)執(zhí)行當(dāng)前正在被執(zhí)行的指如果是本地方法,則PC寄存器值為Underfined,寄存器存放如果當(dāng)前執(zhí)行環(huán)境指針、程序技術(shù)器、操作棧指針、計(jì)算的變量指針等信息9、虛擬機(jī)的組件就是執(zhí)行引擎,它負(fù)責(zé)執(zhí)行虛擬機(jī)的字節(jié)碼,一般進(jìn)行編譯成機(jī)器碼后執(zhí)行Java堆內(nèi)存用于存放由new創(chuàng)建的對(duì)象和數(shù)組在堆中分配的內(nèi)存由java虛擬機(jī)自動(dòng)回收器來(lái)管理在堆中產(chǎn)生了一個(gè)數(shù)組或者對(duì)象后,還可以在棧中定義一個(gè)特殊的變量,這個(gè)變量的取值等于數(shù)組或者對(duì)象在堆內(nèi)存中的首地址,在棧中的這個(gè)特殊的變量就變成了數(shù)組或者對(duì)象的變量,以后就可以在程序中使用棧內(nèi)存中的變量來(lái)堆中的數(shù)組或者對(duì)象,變量相當(dāng)于為數(shù)組或者對(duì)象起的一個(gè)別名,或者代號(hào)。和老年代。其中新聲帶存放新生的對(duì)象或者不大的對(duì)象,老年代則存放老年對(duì)象分為den區(qū)s0區(qū)s1區(qū),s0和s1也被稱為from和to區(qū)域,他們是兩塊大小相等并且可以互相角色的空間。絕大多數(shù)情況下,對(duì)象首先分配在eden區(qū),在回收后,如果對(duì)象還存活,則進(jìn)入s0或s1區(qū),之后每經(jīng)過(guò)一次JavaJava棧是一塊線程私有的空間,一個(gè)棧,一般由三部分組成:局部變量表操作數(shù)據(jù)棧和幀數(shù)據(jù)區(qū)操作數(shù)棧:主要保存計(jì)算過(guò)程的中間結(jié)果,同時(shí)作為計(jì)算過(guò)程中的變量臨時(shí)的空間幀數(shù)據(jù)區(qū):除了局部變量表和操作數(shù)據(jù)棧以外,棧還需要一些數(shù)據(jù)來(lái)支持常量池的解析,這里幀數(shù)據(jù)區(qū)保常量池的指針,方便計(jì)程序常量池,另外當(dāng)函數(shù)返回或出現(xiàn)異常時(shí)賣虛擬機(jī)子必須有一個(gè)異常處理表,方便發(fā)送異常的時(shí)候找到異常的代碼,因此異常處理表也是幀數(shù)據(jù)區(qū)的一部分。JavaJaa比如類的字段方法為永久區(qū)。在虛擬機(jī)運(yùn)行的過(guò)程中,如果可以系統(tǒng)的運(yùn)行狀態(tài),那么對(duì)于問(wèn)題的故障排查會(huì)有一定的幫助,為此,在虛擬機(jī)提供了一些系統(tǒng)狀態(tài)的參數(shù),使用給定的參數(shù)執(zhí)行Java問(wèn)題。我們進(jìn)行虛擬機(jī)參數(shù)配置,其實(shí)就是圍繞著堆棧方法區(qū)你說(shuō)下你熟悉那些jvm參數(shù)調(diào)優(yōu)- 每次觸發(fā)GC的時(shí)候打印相關(guān)日- 串行回-XX:+Printetails更詳細(xì)的GC日- 堆初始- 堆最大可用- 堆最大可用 總結(jié):在實(shí)際工作中,我們可以直接將初始的堆大小與最大堆大小相等,這樣的好處是可以減少程序運(yùn)行時(shí)回收次數(shù),從而提高效率。- 用來(lái)設(shè)置中eden空間和from/to空間的比設(shè)置publicclassJvmDemo01publicstaticvoidmain(String[]args)publicclassJvmDemo01publicstaticvoidmain(String[]args)throwsInterruptedException{byte[]b1=newbyte[1*1024*1024];System.out.println("分配了byte[]b2=newbyte[4*1024*}staticprivateStringtoM(longmaxMemory)floatnum=(float)maxMemory/(1024*1024);DecimalFormatdfnewDecimalFormat("0.00格式化小數(shù)Strings=df.format(num);//返回的是String類型return}staticprivatevoidjvmInfo()longmaxMemory=Runtime.getRuntime().maxMemory();System.out.println("maxMemorymaxMemory轉(zhuǎn)換為M:toM(maxMemory));//longfreeMemory=Runtime.getRuntime().freeMemory();System.out.println("freeMemoryfreeMemory+",轉(zhuǎn)換為M:"+toM(freeMemory));//longtotalMemory=Runtime.getRuntime().totalMemory();System.out.println("totalMemorytotalMemory+",轉(zhuǎn)換為M"+toM(totalMemory));}}設(shè)置與老年代優(yōu)化參-Xmn大小,一般設(shè)為整個(gè)堆的1/3到1/4左-XX:SurvivorRatio設(shè)置中eden區(qū)和from/to空間的比例關(guān)系設(shè)置比例參publicclassJvmDemo02publicstaticvoidmain(String[]args)//-Xms20m-Xmx20m-Xmn1m-XX:SurvivorRatio=2-XX:+Print etailspublicclassJvmDemo02publicstaticvoidmain(String[]args)//-Xms20m-Xmx20m-Xmn1m-XX:SurvivorRatio=2-XX:+Print etails-XX:+UseSerialGCbyte[]b=null;for(inti=0;i<10;i++){b=new}}}}設(shè)置新生與老年代代參-Xms20m-Xmx20m-XX:SurvivorRatio=2-XX:+Printetails--總結(jié):不同的堆分布情況,對(duì)系統(tǒng)執(zhí)行會(huì)產(chǎn)生一定的影響,在實(shí)際工作中應(yīng)該根據(jù)系統(tǒng)的特點(diǎn)做出合理的配置,基本策略:盡可能將對(duì)象預(yù)留在,減少老年代的GC次數(shù)。除了可以設(shè)置的絕對(duì)大小(-Xmn,可以使用(-XXNewati)設(shè)置和老年代的比例:-XX:NwRaio=老年代/內(nèi)存溢出解決辦設(shè)置堆內(nèi)存大錯(cuò)誤原因javalangOutOfMemoryErrorJavaheapspace堆內(nèi)存溢publicstaticvoidmain(String[]args)throwsInterruptedException{List<Object>list=publicstaticvoidmain(String[]args)throwsInterruptedException{List<Object>list=newArrayList<>();for(inti=0;i<10;i++){Byte[]bytes=newByte[1*1024*1024];}System.out.println("添加成功}設(shè)置棧內(nèi)存大錯(cuò)誤原因javalangStackOverflowError棧內(nèi)存溢棧溢出產(chǎn)生于遞歸調(diào)用,循環(huán)遍歷是不會(huì)的,但是循環(huán)方法里面產(chǎn)生遞歸調(diào)用,也會(huì)發(fā)生棧溢出。解決辦法:設(shè)置線程最大調(diào)用深度-Xss5m置最大調(diào)用深publicpublicclassJvmDemo04{privatestaticintcount;publicstaticvoidcount(){try{}catch(Throwablee){}}publicstaticvoidmain(String[]args)}}Tomcatcatalina.sh修改JVM堆內(nèi)存大JAVA_OPTS="-server-Xms800m-Xmx800m-XX:PermSize=256m-XX:MaxPermSize=512m-JVM在JVM啟動(dòng)參數(shù)中,可以設(shè)置跟內(nèi)存回收相關(guān)的一些參數(shù)設(shè)置,默認(rèn)情況不做任何設(shè)置JVM會(huì)工作的很好,但對(duì)一些配置很好的Server具體的應(yīng)用必須仔細(xì)調(diào)優(yōu)才能獲得最佳性能。通過(guò)設(shè)置我們希望達(dá)到一些目標(biāo):GC的時(shí)間足夠的GC的次數(shù)足夠的發(fā)生Full 和老年代)的周期足夠的前兩個(gè)目前是相悖的,要想GC時(shí)間小必須要一個(gè)更小的堆,要保證GC次數(shù)足夠少,必須保證一個(gè)更大的堆,我們只能取其平針對(duì)JVM堆的設(shè)置,一般可以通過(guò)-Xms-Xmx限定其最小、最大值,為了防止收集器在最小、最大之間收縮堆而產(chǎn)年輕代和年老代將根據(jù)默認(rèn)的比例(1:2)分配堆內(nèi)存,可以通過(guò)調(diào)整二者之間的比率NewRaio來(lái)調(diào)整二者之間的大小,也可以針對(duì)回收代,比如年輕代,通過(guò)-XXnewize-XXMaxewSe來(lái)設(shè)置其絕對(duì)大小。同樣,為了防止年輕代的堆收縮,我們通常會(huì)把-XX:ewSzeXX:axNwSie設(shè)置為同樣大小年輕代和年老代設(shè)置多大才算合理?這個(gè)我問(wèn)題是沒(méi)有答案的否則也就不會(huì)有調(diào)優(yōu)我們觀察一下二者大小變化有哪些影響更大的年輕代必然導(dǎo)致更小的年老代,大的年輕代會(huì)延長(zhǎng)普通GC的周期,但會(huì)增加每

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論