資源描述:
《java緩存應(yīng)用》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、JAVA緩存體系及應(yīng)用2010.10.27目錄帶著問題來,帶著答案走JAVA內(nèi)存體系介紹基本緩存的使用緩存框架的介紹內(nèi)存溢出狀況分析內(nèi)存檢查工具的使用問題JVM內(nèi)存的分配原理?JVM啟動的時候如何正確的設(shè)置內(nèi)存參數(shù)?JVM內(nèi)存是不是越大越好?什么情況下大家用到了緩存處理,很好的解決了問題?緩存框架幫我們解決哪些問題,為什么要使用緩存框架?你是如何進(jìn)行內(nèi)存溢出檢查的?JAVA內(nèi)存體系介紹操作系統(tǒng)的內(nèi)存使用和管理JVM內(nèi)存的分類JVM內(nèi)存參數(shù)設(shè)置及作用垃圾回收機制內(nèi)存實時狀態(tài)查詢操作系統(tǒng)的內(nèi)存使用和管理Windows內(nèi)存使用虛擬內(nèi)存是Windows管理所有可用內(nèi)存的方式。Wind
2、ows32位為每個進(jìn)程分配了4G的虛擬地址空間(用于表示該進(jìn)程有這么多的空間可用),4G是由于操作系統(tǒng)+CPU是32位的,尋址空間就只有2的32次方,因此得出4G的存儲空間。Windows操作系統(tǒng)默認(rèn)會給程序和系統(tǒng)預(yù)留2G的內(nèi)存尋址空間;我們可以通過配置將應(yīng)用程序的最大內(nèi)存配置到3G。4G配置但電腦顯示最多3.5內(nèi)存。因為:xp/vista32bit在安裝4G內(nèi)存后會分配其中部分內(nèi)存作為設(shè)備保留的內(nèi)存地址。64位就不存在4GB空間的束縛了。Application2GB用于程序存放代碼,數(shù)據(jù),堆棧,自由存儲區(qū)WindowsSystem2GB共享內(nèi)存,所有進(jìn)程都用到的內(nèi)存區(qū)域操作
3、系統(tǒng)規(guī)定:一個應(yīng)用程序所能承載的最大尋址內(nèi)存是2GB(可以通過配置改變到3GB),因為主要是為了預(yù)留一部分給操作系統(tǒng)使用,叫做共享內(nèi)存區(qū)。所以雖然一個程序理論上可以訪問4GB內(nèi)存,但是實際上只能分配2GB的空間。所以我們可以得出2個程序的最大使用內(nèi)存是:2G(共享內(nèi)存)+2*2G(程序內(nèi)存)=6G為什么我的電腦是2G內(nèi)存,但是在系統(tǒng)可以使用超過2G的內(nèi)存空間,大概有4G!頁面文件以上情況是由于頁面文件控制的。這里很容易混淆一個概念,認(rèn)為以上windows磁盤用來充當(dāng)內(nèi)存的叫做虛擬內(nèi)存,其實windows管理的內(nèi)存都叫做虛擬內(nèi)存。所以虛擬內(nèi)存是:RAM(物理內(nèi)存)+頁面文件(磁
4、盤內(nèi)存)頁面文件即當(dāng)內(nèi)存不夠時系統(tǒng)會拿出一部分硬盤空間來充當(dāng)內(nèi)存使用,當(dāng)內(nèi)存占用完時,電腦就會自動調(diào)用硬盤來充當(dāng)內(nèi)存,以緩解內(nèi)存的緊張。比如:你的機器有2G內(nèi)存,當(dāng)使用的內(nèi)存超過2G時,超過的部分就會將硬盤上的文件映射成內(nèi)存來使用。按照這樣邏輯我們不難得出只要虛擬內(nèi)存夠大,我們就可以無限制的使用,不過考慮到性能這也是不切實際的。以上只是很淺顯的一個理解,其實Windows虛擬內(nèi)存的管理是一個比較復(fù)雜的處理過程,由于windows的多任務(wù)機制,再配合虛擬內(nèi)存,其實windows運行的程序所占用的內(nèi)存是遠(yuǎn)遠(yuǎn)超過可分配內(nèi)存的。應(yīng)用程序1內(nèi)存磁盤1激活應(yīng)用程序2分配相應(yīng)的內(nèi)存34回收
5、內(nèi)存5將內(nèi)存內(nèi)容映射到頁面文件并重新建立映射最小化應(yīng)用程序67關(guān)閉應(yīng)用程序釋放虛擬內(nèi)存應(yīng)用程序289切換應(yīng)用程序2讀取頁面文件放到物理內(nèi)存中并重新建立映射10操作系統(tǒng)來調(diào)度當(dāng)物理內(nèi)存吃緊的情況下,會產(chǎn)生大量的頁入,頁出動作,從而降低系統(tǒng)運行速度3-5:表示頁入動作8-10:表示頁出動作再來看看任務(wù)管理器總數(shù):RAM物理內(nèi)存總大小可用數(shù):當(dāng)前RAM內(nèi)存還剩余多少系統(tǒng)緩存:指的是系統(tǒng)共享內(nèi)存使用量提交更改(前面的):實際是虛擬內(nèi)存使用量,包括RAM和頁面文件提交更改(后面的):虛擬內(nèi)存的總量總RAM+總的頁面文件進(jìn)程內(nèi)存使用量,該數(shù)據(jù)指的是程序獨占RAM內(nèi)存和使用到的系統(tǒng)共享內(nèi)存
6、因為有共享成分在里面,所以所有程序內(nèi)存加起來不一定等于系統(tǒng)RAM使用的總量。虛擬內(nèi)存大小,指的是程序所用到的所有2G虛擬內(nèi)存的尋址空間大小,一般會包含在RAM、頁面文件、exe和dll中。關(guān)于Linux的內(nèi)存管理Windows管理內(nèi)存更加規(guī)范和統(tǒng)一,通過統(tǒng)一的內(nèi)存映射和跟蹤機制來完成,但是同時也失去了一定的靈活性。Linux管理內(nèi)存不是很規(guī)范,省去了內(nèi)存映射,而是直接將內(nèi)存提交到頁面,并且只有當(dāng)頁面被真正使用了,才會將其綁定到內(nèi)存中中。JVM內(nèi)存分類系統(tǒng)級內(nèi)存分配JVM的內(nèi)存分配機制其實也是基于操作系統(tǒng)分配機制JVM最大的內(nèi)存在win32下是2GJVM的內(nèi)存使用情況實際被分為
7、:JVM虛擬機、JAVA程序的字節(jié)碼(classes)、系統(tǒng)內(nèi)存空間NativeHeap(主要用于存放線程和一些系統(tǒng)級的對象和操作)、JAVA內(nèi)存JavaHeap(真正的存放JavaObject的內(nèi)存區(qū)域)Application2GB用于程序存放代碼,數(shù)據(jù),堆棧,自由存儲區(qū)WindowsSystem2GB共享內(nèi)存,所有進(jìn)程都用到的內(nèi)存區(qū)域JvmPermanetNativeHeapJavaHeapSystemlibJAVA程序本身使用的內(nèi)存區(qū)域存放線程、系統(tǒng)變量、一些類似Runtime的操作存放具體的Cl