內(nèi)存區(qū)域
程序計數(shù)器
這個就跟處理器中的程序計數(shù)器的功能差不多,是記錄下一條字節(jié)碼的地址
不過處理器的程序計數(shù)器是為進程服務(wù)的,jvm中的程序計數(shù)器是為線程服務(wù)的
所以jvm的程序計數(shù)器是線程私有的,聲明周期和線程相同,各線程之間的程序計數(shù)器互不干擾
因為是記錄下一條字節(jié)碼的地址,所以不對java中native方法服務(wù),native方法會直接開啟一個進程,由cpu中的程序計數(shù)器來控制
程序計數(shù)器是jvm中唯一不會拋出OutOfmemoryError的區(qū)域
虛擬機棧
這個也跟cpu中的棧的作用差不多,進入方法時,在棧中入棧一個棧幀,棧幀中記錄著局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口。當退出這個方法時,出棧當前棧幀
虛擬機棧因為面向方法服務(wù),所以他是線程私有的
局部變量表
局部變量表中記錄著方法中的局部變量的類型(如int,boolean,char,...,引用類型)和這個變量的內(nèi)存地址
操作數(shù)棧
操作數(shù)棧相當于cpu中的通用寄存器,存放著被邏輯運算單元處理的值,很多指令都需要從這個區(qū)域讀取值(add,cmp,mov,...)
方法出口
這里記錄著處理完當前方法之后,執(zhí)行的下一條指令的地址
本地方法棧
本地方法棧其實跟虛擬機棧差不多,只不過是面向native方法服務(wù),虛擬機棧只對字節(jié)碼服務(wù)
堆
這個區(qū)域是絕大多數(shù)對象生活的地方。自然也是垃圾收集器的重點照顧對象。
該區(qū)域負責存儲對象的實例,在這里進行對象的內(nèi)存空間的分配。因為絕大多數(shù)對象都生活在這里,所以他是所有線程共享的區(qū)域。
堆還細分為新生代區(qū)域和老生代區(qū)域。新生代區(qū)域主要存活的是“朝生夕死”的對象,頻繁的出生,又頻繁的被消滅,這是被垃圾收集器集火的區(qū)域。老生代區(qū)域存活的需要穩(wěn)定存活的對象,所以垃圾收集器比較少光顧這里。
絕大多數(shù)對象是存活時間較短的,既生活在新生代。所以新生代區(qū)域通常比老生代區(qū)域要大。
方法區(qū)
方法區(qū)記錄著已加載類的信息。如全限定名(包名+類名)、方法、字段、描述符、參數(shù)、常量、靜態(tài)變量。此區(qū)域也是被所有線程共享。
這個區(qū)域還有一個名稱——永生代,意味著這個區(qū)域很少被清理。因為類的可清理幅度很小,以及判斷一個類是否是不再被需要的類要求比較苛刻,所以垃圾收集器很少清理這個區(qū)域。
運行時常量池
這個區(qū)域記錄著編譯期生成的字面量和符號引用。同樣也是被所有線程共享的。
字面量
字面量包括是被雙引號""標明的字符串,以及在代碼中寫死的一些基本數(shù)據(jù)類型,這些都屬于常量。
在jdk1.6,運行時常量池是屬于方法區(qū)的一部分。發(fā)現(xiàn)一個常量,首先檢查運行時常量池中是否已經(jīng)存放了這個常量,如果沒有存放,則復制一份到運行時常量池中。以后每一次試圖創(chuàng)建相同值的常量,都直接引用運行時常量池。
從jdk1.7開始,運行時常量池已經(jīng)劃分到了堆中。對于首次出現(xiàn)的常量,不再復制到運行時常量池,而是在運行時常量池中保留一份引用,指向首次出現(xiàn)常量的內(nèi)存地址。
直接內(nèi)存
這個區(qū)域其實上不是jvm的一部分,而且屬于其他進程的。當調(diào)用一個native方法的時候,就可能會產(chǎn)生一份直接內(nèi)存。
直接內(nèi)存指的是在native方法中使用的那一塊內(nèi)存空間。比如NIO操作,它是使用native方法來讀寫文件的,這時就會產(chǎn)生一份直接內(nèi)存指向讀寫文件的內(nèi)存(緩存)。
注意直接內(nèi)存并不在jvm中,但是會在jvm堆中保持一個引用,指向內(nèi)存空間的直接內(nèi)存。這樣就避免了類似NIO操作頻繁的從內(nèi)存空間和java堆中來回復制數(shù)據(jù)。
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號