Java内存管理和客户加载过程_Java内存管理的进一步理解-模拟过程图解
java的內(nèi)存管理分為:
1、堆內(nèi)存;2、棧內(nèi)存;3、方法區(qū);4、本地方法區(qū)
下面通過(guò)一個(gè)簡(jiǎn)單的代碼示例,理解Java中,內(nèi)存是怎么進(jìn)行分配與管理的。示例如下:
public classJavaRamExplain {public static voidmain(String[] args) {
Person.whatCountry();
Person sam= new Person("sam", 20);
sam.introduceSelf();
}
}classPerson {privateString name;private intage;public static String country = "china";public Person(String name, intage) {this.name =name;this.age =age;
}public voidintroduceSelf() {
System.out.println("My name's" + name + ",i'm" + age + "years old.");
}public static voidwhatCountry() {
System.out.println("This people come from" +country);
}
}
當(dāng)開(kāi)始運(yùn)行JavaRamExplain類(lèi)時(shí),JVM便會(huì)開(kāi)始進(jìn)行內(nèi)存的分配管理工作。
圖解過(guò)程為:
(圖片較大,看不清可以圖片右鍵-查看圖像,進(jìn)行查看原圖)
可以看到到第八步工作結(jié)束后:
棧內(nèi)存中的數(shù)據(jù)全部被釋放(所以說(shuō)棧內(nèi)存中的數(shù)據(jù)的生命周期是已知并固定的,因?yàn)殡S著方法的執(zhí)行結(jié)束,棧內(nèi)存便會(huì)進(jìn)行釋放);
堆內(nèi)存中的Person對(duì)象,現(xiàn)已沒(méi)有任何對(duì)象引用指向它,所以它將被視作內(nèi)存中的“垃圾”,等待回收。(堆內(nèi)存中的數(shù)據(jù)由java的垃圾回收機(jī)制自動(dòng)進(jìn)行處理,所以其生命周期不確定)
由圖中也可以看到:
類(lèi)的方法會(huì)進(jìn)行壓棧和彈棧,對(duì)應(yīng)的,方法中用到的參數(shù)(變量)便會(huì)相應(yīng)的在棧內(nèi)存中進(jìn)行存儲(chǔ)和釋放。所以棧內(nèi)存用于存放局部變量(包括基本類(lèi)型和引用類(lèi)型)。
類(lèi)的對(duì)象會(huì)被存放到堆內(nèi)存中,相應(yīng)的該對(duì)象所包含的成員變量也會(huì)被存放到該空間。
類(lèi)本身將在jvm通過(guò).class運(yùn)行該類(lèi)時(shí)就會(huì)被加載到內(nèi)存中的方法區(qū)內(nèi),顧名思義,方法區(qū)用于保存類(lèi)的方法代碼,其中普通方法被存放在非靜態(tài)區(qū),靜態(tài)成員(方法和變量)被存放在方法區(qū)中專(zhuān)門(mén)的靜態(tài)區(qū)當(dāng)中。
棧內(nèi)存是方法的運(yùn)行區(qū)域(因?yàn)榉椒ㄖ卸x的局部變量需要在棧里開(kāi)辟空間),方法區(qū)是方法的存放區(qū)域。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Java内存管理和客户加载过程_Java内存管理的进一步理解-模拟过程图解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java举例include_Java S
- 下一篇: python animation 轨迹_