java內(nèi)存區(qū)域

java運(yùn)行時(shí)內(nèi)存區(qū)域.png
特例:
直接內(nèi)存->堆外內(nèi)存,不屬于java運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分,常見的NIO
對(duì)象創(chuàng)建過程
- new指令;
- 檢查能否在常量池中定位到一個(gè)類的符號(hào)引用,檢查該類是否已經(jīng)被加載、解析和初始化,如果沒有需要執(zhí)行相應(yīng)的類加載過程;
- 為新生對(duì)象分配內(nèi)存:基于不同的垃圾回收算法決定使用指針碰撞or空閑列表;
- 并發(fā)問題處理:1-同步,基于cas機(jī)制和失敗重試的方式,2-本地線程分配緩沖(TLAB),每個(gè)線程在java堆中預(yù)先分配一小塊內(nèi)存;
- 對(duì)象頭設(shè)置:相關(guān)的元數(shù)據(jù)信息,哈希碼,GC分代年齡等信息
結(jié)語:java內(nèi)存區(qū)域還有諸多細(xì)節(jié),不過開發(fā)關(guān)注的主要就是這上訴兩部分。