JVM是最好的軟件工程之一,它為Java提供了堅實的基礎(chǔ),許多流行語言如Kotlin、Scala、Clojure、Groovy都使用JVM作為運行基礎(chǔ)。一個專業(yè)的Java工程師必須要了解并掌握J(rèn)VM,接下來深圳達(dá)內(nèi)教育給大家分享免費java視頻教程,JVM調(diào)優(yōu)講解。
JVM常見的調(diào)優(yōu)參數(shù)包括:
-Xmx:指定java程序的最大堆內(nèi)存,使用java-Xmx5000M-version判斷當(dāng)前系統(tǒng)能分配的最大堆內(nèi)存;
-Xms:指定最小堆內(nèi)存,通常設(shè)置成跟最大堆內(nèi)存一樣,減少GC;
-Xmn:設(shè)置年輕代大小。整個堆大小=年輕代大小+年老代大小。所以增大年輕代后,將會減小年老代大小。此值對系統(tǒng)性能影響較大,Sun官方推薦配置為整個堆的3/8;
-Xss:指定線程的最大??臻g,此參數(shù)決定了java函數(shù)調(diào)用的深度,值越大調(diào)用深度越深,若值太小則容易出棧溢出錯誤(StackOverflowError);
-XX:PermSize:指定方法區(qū)(永久區(qū))的初始值,默認(rèn)是物理內(nèi)存的1/64,在Java8永久區(qū)移除,代之的是元數(shù)據(jù)區(qū),由-XX:metaspaceSize指定;
-XX:MaxPermSize:指定方法區(qū)的最大值,默認(rèn)是物理內(nèi)存的1/4,在java8中由-XX:MaxmetaspaceSize指定元數(shù)據(jù)區(qū)的大??;
-XX:NewRatio=n:年老代與年輕代的比值,-XX:NewRatio=2,表示年老代與年輕代的比值為2:1;
-XX:SurvivorRatio=n:Eden區(qū)與Survivor區(qū)的大小比值,-XX:SurvivorRatio=8表示Eden區(qū)與Survivor區(qū)的大小比值是8:1:1,因為Survivor區(qū)有兩個(from,to)。
JVM實質(zhì)上分為三大塊,年輕代(YoungGen),年老代(OldMemory),及持久代(Perm,在Java8中被取消)。
年輕代大小選擇
響應(yīng)時間優(yōu)先的應(yīng)用:盡可能設(shè)大,直到接近系統(tǒng)的最低響應(yīng)時間限制(根據(jù)實際情況選擇)。在此種情況下,年輕代手機發(fā)生的頻率也是最小的。同時,減少到達(dá)年老代的對象。
吞吐量優(yōu)先的應(yīng)用:盡可能的設(shè)置大,可能到達(dá)Gbit的程度。因為對響應(yīng)時間沒有要求,垃圾收集可以并行進行,一般適合8CPU以上的應(yīng)用。
年老代大小選擇
響應(yīng)時間優(yōu)先的應(yīng)用:年老代使用并發(fā)收集器,所以其大小需要小心設(shè)置,一般要考慮并發(fā)會話率和會話持續(xù)時間等一些參數(shù)。如果堆設(shè)置小了,可以會造成內(nèi)存碎片、高回收頻率以及應(yīng)用暫停而使用傳統(tǒng)的標(biāo)記清除方式;如果堆大了,則需要較長的收集時間。最優(yōu)化的方案,一般需要參考以下數(shù)據(jù)獲得:并發(fā)垃圾收集信息、持久代并發(fā)收集次數(shù)、傳統(tǒng)GC信息、花在年輕代和年老代回收上的時間比例。
減少年輕代和年老代花費的時間,一般會提高應(yīng)用的效率。
吞吐量優(yōu)先的應(yīng)用:一般吞吐量優(yōu)先的應(yīng)用都有一個很大的年輕代和一個較小的年老代。原因是,這樣可以盡可能回收掉大部分短期對象,減少中期的對象,而年老代盡存放長期存活對象。
較小堆引起的碎片問題
因為年老代的并發(fā)收集器使用標(biāo)記、清除算法,所以不會對堆進行壓縮。當(dāng)收集器回收時,他會把相鄰的空間進行合并,這樣可以分配給較大的對象。但是,當(dāng)堆空間較小時,運行一段時間以后,就會出現(xiàn)“碎片”,如果并發(fā)收集器找不到足夠的空間,那么并發(fā)收集器將會停止,然后使用傳統(tǒng)的標(biāo)記、清除方式進行回收。如果出現(xiàn)“碎片”,可能需要進行如下配置:
-XX:+UseCMSCompactAtFullCollection:使用并發(fā)收集器時,開啟對年老代的壓縮。
-XX:CMSFullGCsBeforeCompaction=0:上面配置開啟的情況下,這里設(shè)置多少次FullGC后,對年老代進行壓縮。
以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機構(gòu)的小編針對“免費java視頻教程,JVM調(diào)優(yōu)講解”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
Java視頻教程