jvm內(nèi)存參數(shù)詳解以及配置調(diào)優(yōu)

jvm內(nèi)存參數(shù)詳解以及配置調(diào)優(yōu)

ID:8972093

大?。?2.19 KB

頁(yè)數(shù):13頁(yè)

時(shí)間:2018-04-13

jvm內(nèi)存參數(shù)詳解以及配置調(diào)優(yōu)_第1頁(yè)
jvm內(nèi)存參數(shù)詳解以及配置調(diào)優(yōu)_第2頁(yè)
jvm內(nèi)存參數(shù)詳解以及配置調(diào)優(yōu)_第3頁(yè)
jvm內(nèi)存參數(shù)詳解以及配置調(diào)優(yōu)_第4頁(yè)
jvm內(nèi)存參數(shù)詳解以及配置調(diào)優(yōu)_第5頁(yè)
資源描述:

《jvm內(nèi)存參數(shù)詳解以及配置調(diào)優(yōu)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、JVM的結(jié)構(gòu)從功能上分,Java虛擬機(jī)主要由六個(gè)部分組成,可以分成三類:第一類:JVMAPI:就是我們最常用的JavaAPI,它是開(kāi)發(fā)人員和Java交互的入口,它主要是JAVA_HOME/jre/lib下的運(yùn)行時(shí)類庫(kù)rt.jar和編譯相關(guān)的tools.jar第二類:JVM內(nèi)部組件類裝載器(ClassLoader):將ByteArray的.class文件裝載、鏈接和初始化。內(nèi)存管理(MemoryManagent):為對(duì)象分配內(nèi)存,以及釋放內(nèi)存。后者就是垃圾回收GarbageCollector(GC)。由于

2、JVM最復(fù)雜的、最影響性能的就是GC,所以內(nèi)存管理一般就指垃圾回收。診斷接口(DiagosticsInterface):這主要體現(xiàn)在JVMTI(jdk1.4下的JVMPI和JVMDI),它主要用來(lái)診斷程序的問(wèn)題和性能,一般提供給工具廠商實(shí)現(xiàn)。如eclispeIDE下的debug功能,Jprofiler性能調(diào)優(yōu)工具。類解釋器(Interpreter):解釋裝載進(jìn)虛擬機(jī)的class對(duì)象,包括JIT等特性相關(guān)。第三類:平臺(tái)相關(guān)接口(PlatformInterface):主要為了跨操作系統(tǒng)平臺(tái)重用JVM代碼,不

3、過(guò),它和我們開(kāi)發(fā)人員關(guān)系不大。在以上六個(gè)組件中,我們開(kāi)發(fā)人員最關(guān)心的是ClassLoader和GC,用Java做系統(tǒng)框架、容器和它們密切相關(guān)。做業(yè)務(wù)系統(tǒng)時(shí)一些基礎(chǔ)代碼也和它們打交道,譬如最常用的Class.forName(),Thread.currentThread.getContextClassLoader()。我們仔細(xì)想想,為什么是上面兩個(gè)問(wèn)題?因?yàn)椋臀覀僣lass的整個(gè)生命周期最為相關(guān):怎么將一個(gè)class和相關(guān)class加載進(jìn)來(lái),class實(shí)例什么時(shí)候創(chuàng)建,什么時(shí)候被銷毀?所以,下面的部分我

4、們要專門討論這些問(wèn)題。在JVM中有兩種垃圾方式,一種叫做Minor(次收集),另一種叫做Major(主收集)。其中Minor在Young?Generation的空間被對(duì)象全部占用后執(zhí)行,主要是對(duì)Young?Generation中的對(duì)象進(jìn)行垃圾收集。而Major是針對(duì)于整個(gè)Heap?size的垃圾收集。其中Minor方式的收集經(jīng)常發(fā)生,并且Minor收集所占用的系統(tǒng)時(shí)間小。Major方式的垃圾收集則是一種“昂貴”的垃圾收集方式,因?yàn)樵贛ajor要對(duì)整個(gè)Heap?size進(jìn)行垃圾收集,這會(huì)使得應(yīng)用停頓的時(shí)間

5、變得較長(zhǎng)。?java?-jar?-server?-verbose:gc?-XX:+UseParNewGC?-Xmn8m?-Xms32m?-Xmx32m?SwingSet2.jar使用了-XX:+UseParNewGC選項(xiàng)的minor收集的時(shí)間要比不使用的時(shí)候優(yōu)。java?-jar?-verbose:gc?-XX:+UseConcMarkSweepGC?-XX:+UseParNewGC?-Xmn64m?-Xms256m?-Xmx256m?SwingSet2.jar采用-XX:+UseConcMarkSwe

6、epGC選項(xiàng)在Heap?Size?比較大而且Major收集時(shí)間較長(zhǎng)的情況下使用更合適·堆(Heap)和非堆(Non-heap)內(nèi)存按照官方的說(shuō)法:“Java虛擬機(jī)具有一個(gè)堆,堆是運(yùn)行時(shí)數(shù)據(jù)區(qū)域,所有類實(shí)例和數(shù)組的內(nèi)存均從此處分配。堆是在Java虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建的?!薄霸贘VM中堆之外的內(nèi)存稱為非堆內(nèi)存(Non-heapmemory)”??梢钥闯鯦VM主要管理兩種類型的內(nèi)存:堆和非堆。簡(jiǎn)單來(lái)說(shuō)堆就是Java代碼可及的內(nèi)存,是留給開(kāi)發(fā)人員使用的;非堆就是JVM留給自己用的,所以方法區(qū)、JVM內(nèi)部處理或優(yōu)化所

7、需的內(nèi)存(如JIT編譯后的代碼緩存)、每個(gè)類結(jié)構(gòu)(如運(yùn)行時(shí)常數(shù)池、字段和方法數(shù)據(jù))以及方法和構(gòu)造方法的代碼都在非堆內(nèi)存中?!ざ褍?nèi)存分配JVM初始分配的內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64;JVM最大分配的內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4。默認(rèn)空余堆內(nèi)存小于40%時(shí),JVM就會(huì)增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時(shí),JVM會(huì)減少堆直到-Xms的最小限制。因此服務(wù)器一般設(shè)置-Xms、-Xmx相等以避免在每次GC后調(diào)整堆的大小。·非堆內(nèi)存分配JVM使用-XX:PermSize設(shè)

8、置非堆內(nèi)存初始值,默認(rèn)是物理內(nèi)存的1/64;由XX:MaxPermSize設(shè)置最大非堆內(nèi)存的大小,默認(rèn)是物理內(nèi)存的1/4?!VM內(nèi)存限制(最大值)首先JVM內(nèi)存限制于實(shí)際的最大物理內(nèi)存(廢話!呵呵),假設(shè)物理內(nèi)存無(wú)限大的話,JVM內(nèi)存的最大值跟操作系統(tǒng)有很大的關(guān)系。簡(jiǎn)單的說(shuō)就32位處理器雖然可控內(nèi)存空間有4GB,但是具體的操作系統(tǒng)會(huì)給一個(gè)限制,這個(gè)限制一般是2GB-3GB(一般來(lái)說(shuō)Windows系統(tǒng)下為1.5G-2G,Linux系統(tǒng)下為2

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。