摘要:棧區(qū)棧區(qū)描述的是方法執(zhí)行的內(nèi)存模型。創(chuàng)建一個(gè)實(shí)例對(duì)象,也就是在堆區(qū)分配一個(gè)對(duì)象的內(nèi)存,給對(duì)象屬性賦值創(chuàng)建一個(gè)類(lèi)對(duì)象,先加載該類(lèi),然后再分配對(duì)象內(nèi)存,再給該對(duì)象賦值調(diào)用方法,分配棧幀調(diào)用方法,分配棧幀參考面向?qū)ο髢?nèi)存分析堆區(qū)棧區(qū)方法區(qū)
棧區(qū)
棧區(qū)描述的是方法執(zhí)行的內(nèi)存模型。每個(gè)方法在執(zhí)行時(shí)都會(huì)創(chuàng)建一個(gè)棧幀(存放存儲(chǔ)局部變量、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口等)
JVM為每個(gè)線程創(chuàng)建一個(gè)棧,棧屬于線程私有,不能實(shí)現(xiàn)線程間的共享!用于存放該線程執(zhí)行方法的信息(實(shí)際參數(shù)、局部變量等)
基本類(lèi)型變量去,執(zhí)行環(huán)境上下文,操作指令區(qū)(存放操作指令).
堆區(qū)堆用于存儲(chǔ)創(chuàng)建好的對(duì)象和數(shù)組(數(shù)組也是對(duì)象)
JVM只有一個(gè)堆,被所有線程共享
堆是一個(gè)不連續(xù)的內(nèi)存空間,分配靈活,速度慢!
方法區(qū)Jvm只有一個(gè)方法區(qū),被所有線程公用
存放整個(gè)程序中唯一的元素。用于存放已被虛擬機(jī)加載的類(lèi)信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。如class static 變量.
內(nèi)存分配public class MainMemory { int id; String name; int size; Data data; void store() { System.out.println("執(zhí)行存儲(chǔ)中,存儲(chǔ)數(shù)據(jù)類(lèi)型:" + data.type); } void release() { System.out.println("釋放內(nèi)存中"); } // 構(gòu)造方法 MainMemory(){ } public static void main(String [] args) { MainMemory memory = new MainMemory(); // 創(chuàng)建一個(gè)對(duì)象 memory.id=1; memory.name = "test"; memory.size = 1024; Data data = new Data(); data.type = "字符串"; memory.data = data; memory.store(); memory.release(); } } class Data{ public String type; //這里不能使用私有類(lèi) }
java MainMemory,系統(tǒng)收到指令,啟動(dòng)一個(gè)java虛擬機(jī)進(jìn)程
進(jìn)程首先從classpath中找到MainMemory.class文件,讀取該文件的二進(jìn)制 數(shù)據(jù),就是將類(lèi)信息存放到運(yùn)行時(shí)數(shù)據(jù)去的方法區(qū)中,整個(gè)過(guò)程是類(lèi)加載過(guò)程,將其加載到方法區(qū)中
Java虛擬機(jī)定位到方法區(qū)中MainMemory類(lèi)的main()方法的字節(jié)碼,執(zhí)行了方法,會(huì)分配一個(gè)棧幀。
創(chuàng)建一個(gè)實(shí)例對(duì)象,也就是在堆區(qū)分配一個(gè)對(duì)象的內(nèi)存,給對(duì)象屬性賦值
創(chuàng)建一個(gè)Data類(lèi)對(duì)象,先加載該類(lèi),然后再分配對(duì)象內(nèi)存,再給該對(duì)象賦值
調(diào)用store()方法,分配棧幀
調(diào)用release()方法,分配棧幀
參考:面向?qū)ο髢?nèi)存分析
Java堆區(qū)、棧區(qū)、方法區(qū)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75052.html
摘要:從入門(mén)到放棄基本類(lèi)型和引用類(lèi)型有七種數(shù)據(jù)類(lèi)型而的變量根據(jù)指向數(shù)據(jù)類(lèi)型的不同也分為兩種類(lèi)型一種基本類(lèi)型一種引用類(lèi)型基本類(lèi)型基本類(lèi)型包括這五種但凡變量指向這五種數(shù)據(jù)類(lèi)型的都稱(chēng)之為基本類(lèi)型假設(shè)有以上變量那么他們?cè)趦?nèi)存中棧區(qū)的存儲(chǔ)結(jié)構(gòu)大概是這樣子 JS從入門(mén)到放棄-基本類(lèi)型和引用類(lèi)型 JS有number,string,null,undefined,boolean,array,object七種數(shù)...
摘要:引子前不久我建立的技術(shù)群里一位問(wèn)了一個(gè)這樣的問(wèn)題,她貼出的代碼如下所示執(zhí)行結(jié)果如下所示第一個(gè)第二個(gè)這是一個(gè)令人詫異的結(jié)果,為什么第一個(gè)彈出框顯示的是,而不是呢這種疑惑的原理我描述如下一個(gè)頁(yè)面里直接定義在標(biāo)簽下的變量是全局變量即屬于對(duì)象的變量 1) 引子 前不久我建立的技術(shù)群里一位MM問(wèn)了一個(gè)這樣的問(wèn)題,她貼出的代碼如下所示: var a = 1; function hehe...
摘要:內(nèi)存分配解析四方法執(zhí)行完畢,立即釋放局部變量所占用的棧空間。內(nèi)存分配解析五調(diào)用對(duì)象的方法,以實(shí)例為參數(shù)。堆和棧的小結(jié)以上就是程序運(yùn)行時(shí)內(nèi)存分配的大致情況。 前言 java中有很多類(lèi)型的變量、靜態(tài)變量、全局變量及對(duì)象等,這些變量在java運(yùn)行的時(shí)候到底是如何分配內(nèi)存的呢?接下來(lái)有必要對(duì)此進(jìn)行一些探究。 基本知識(shí)概念: (1)寄存器:最快的存儲(chǔ)區(qū), 由編譯器根據(jù)需求進(jìn)行分配,我們?cè)诔绦?..
摘要:虛擬機(jī)棧區(qū)也就是通常所說(shuō)的棧區(qū),它描述的是方法執(zhí)行的內(nèi)存模型,每個(gè)方法被執(zhí)行的時(shí)候都創(chuàng)建一個(gè)棧幀,用于存儲(chǔ)局部變量表操作數(shù)棧動(dòng)態(tài)鏈接方法出口等。每個(gè)方法被調(diào)用到完成,相當(dāng)于一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過(guò)程。 大多數(shù)情況下我們對(duì)GC的了解都只是淺層含義上的,下面我們來(lái)詳細(xì)講解下內(nèi)部的一些實(shí)現(xiàn)原理。講解GC之前,我們得先了解下JVM的內(nèi)存結(jié)構(gòu),才能讓我們理解GC導(dǎo)致是干嘛的。 一.J...
摘要:前兩天看到大神的關(guān)于基本數(shù)據(jù)類(lèi)型和引用類(lèi)型的區(qū)別的文章覺(jué)得寫(xiě)得非常不錯(cuò),就想著在其基礎(chǔ)上加上自己平時(shí)看到的一些知識(shí)點(diǎn)和理解,所以就有了以下的文章基本數(shù)據(jù)類(lèi)型基本數(shù)據(jù)類(lèi)型包括基本數(shù)據(jù)類(lèi)型是按值訪問(wèn)的,就是說(shuō)我們可以操作保存在變量中的實(shí)際的值基 前兩天看到kraaas大神的關(guān)于基本數(shù)據(jù)類(lèi)型和引用類(lèi)型的區(qū)別的文章覺(jué)得寫(xiě)得非常不錯(cuò),就想著在其基礎(chǔ)上加上自己平時(shí)看到的一些知識(shí)點(diǎn)和理解,所以就有了...
閱讀 2621·2021-11-25 09:43
閱讀 2725·2021-11-04 16:09
閱讀 1636·2021-10-12 10:13
閱讀 881·2021-09-29 09:35
閱讀 880·2021-08-03 14:03
閱讀 1777·2019-08-30 15:55
閱讀 2989·2019-08-28 18:14
閱讀 3489·2019-08-26 13:43