最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java 中程序內(nèi)存的分析

 更新時間:2017年04月23日 16:01:12   投稿:lqh  
這篇文章主要介紹了詳解Java 中程序內(nèi)存的分析的相關(guān)資料,需要的朋友可以參考下

這篇文章將簡單的說明下當(dāng)我們運行Java程序時JVM(Java虛擬機)的內(nèi)存分配情況。

首先我們先來感觀的認(rèn)識下幾個名詞:

1、棧,一般來說,基本數(shù)據(jù)類型直接在棧中分配空間,局部變量(在方法代碼段中定義的變量)也在棧中直接分配空間,當(dāng)局部變量所在方法執(zhí)行完成之后該空間便立刻被JVM回收,還有一種是引用數(shù)據(jù)類型,即我們通常所說的需要用關(guān)鍵字new創(chuàng)建出來的對象所對應(yīng)的引用也是在??臻g中,此時,JVM在??臻g中給對象引用分配了一個地址空間(相當(dāng)于一個門牌號,通過這個門牌號就可以找到你家),在堆空間中給該引用的對象分配一個空間,??臻g中的地址引用指向了堆空間中的對象區(qū)(通過門牌號找住址);

2、堆,一般用來存放用關(guān)鍵字new出來的數(shù)據(jù)。

接下來我們再通過一段程序來直觀感受下程序運行時JVM的內(nèi)存情況,

package demo;

public class Student {
  private String name;
  private int age;

  public void study() {
    System.out.println("I love study!");
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }
}
package demo;

public class StudentDemo {
  public static void main(String[] args) {
    Student student = new Student();

    System.out.println(student.getName() + ":" + student.getAge());
    student.setName("John");
    student.setAge(23);
    System.out.println(student.getName() + ":" + student.getAge());
    
    student.study();
    
    Student student2 = student;
    student2.setName("Jack");
    student2.setAge(25);
    System.out.println(student2.getName() + ":" + student2.getAge());
    System.out.println(student.getName() + ":" + student.getAge());
  }
}

當(dāng)我們運行程序時,JVM會把Student類與StudentDemo類編譯完然后加載到JVM中一個叫方法區(qū)的地方,類的成員變量與成員方法也被加載到方法區(qū)中,此時內(nèi)存模型如下

可以看到study方法右邊各有一個16進制的標(biāo)記,而name與age變量沒有,這是因為每個對象都有各自的成員變量,而類中的成員方法卻可以被每個對象所共用,為了節(jié)省內(nèi)存空間,JVM為方法分配了該標(biāo)記(也叫內(nèi)存地址)便于每個new出來的對象查找調(diào)用,接著JVM會自動尋找main方法,在棧中為main方法申請一個空間,這個過程也叫入棧,然后執(zhí)行我們Student類中第5行代碼,這時候,JVM在堆空間中分配一塊內(nèi)存給Student對象,并為其分配一個內(nèi)存地址(如果對象的成員變量沒有賦值,則JVM會為變量賦初始值),在棧中分配一塊內(nèi)存空間用于指向堆空間中的Student對象區(qū)的內(nèi)存地址,此時內(nèi)存模型如下

接著看代碼第8行與第9行,程序為student對象的成員變量賦值,JVM會根據(jù)student所指向的地址在堆內(nèi)存中尋找Student類的變量,并為變量賦新的值

第12行,這時student對象調(diào)用study方法,JVM在??臻g中為study方法申請了一塊內(nèi)存空間

study方法執(zhí)行完后,立即釋放??臻g,代碼第14行,student2對象的引用指向了student所指向的地址

代碼15與16行,為student2的變量賦值,由于student2與student指向了同一個地方,所以這時student對象中變量的值也被改變

到這,main方法中所有代碼執(zhí)行完畢,main方法所占用的棧空間也被回收,而堆空間等待GC回收

代碼執(zhí)行結(jié)果如下:

null:0
John:23
I love study!
Jack:25
Jack:25

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • java 驗證碼的生成實現(xiàn)

    java 驗證碼的生成實現(xiàn)

    這篇文章主要介紹了java 驗證碼的生成實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • Java 中IO流字符流詳解及實例

    Java 中IO流字符流詳解及實例

    這篇文章主要介紹了Java 中IO流字符流詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java webservice上傳下載文件代碼分享

    java webservice上傳下載文件代碼分享

    這篇文章主要為大家詳細介紹了java webservice上傳下載文件代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java實現(xiàn)簡易Web服務(wù)器

    Java實現(xiàn)簡易Web服務(wù)器

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡易Web服務(wù)器的相關(guān)方法,想要制作Web服務(wù)器的朋友可以參考本文
    2016-02-02
  • Java之如何截取視頻第一幀

    Java之如何截取視頻第一幀

    這篇文章主要介紹了Java之如何截取視頻第一幀問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • SpringBoot 集成 Kettle的實現(xiàn)示例

    SpringBoot 集成 Kettle的實現(xiàn)示例

    本文主要介紹了SpringBoot 集成 Kettle的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • MyBatis 參數(shù)類型為String時常見問題及解決方法

    MyBatis 參數(shù)類型為String時常見問題及解決方法

    這篇文章主要介紹了MyBatis 參數(shù)類型為String時常見問題及解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • java計算兩個日期之前的天數(shù)實例(排除節(jié)假日和周末)

    java計算兩個日期之前的天數(shù)實例(排除節(jié)假日和周末)

    下面小編就為大家?guī)硪黄猨ava計算兩個日期之前的天數(shù)實例(排除節(jié)假日和周末)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 手把手教你寫一個spring IOC容器的方法

    手把手教你寫一個spring IOC容器的方法

    這篇文章主要介紹了手把手教你寫一個spring IOC容器的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Java的關(guān)鍵字與標(biāo)識符小結(jié)

    Java的關(guān)鍵字與標(biāo)識符小結(jié)

    這篇文章主要介紹了Java的關(guān)鍵字與標(biāo)識符,總結(jié)整理了Java各種常見的關(guān)鍵字與標(biāo)識符功能、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04

最新評論

天气| 营山县| 健康| 扬州市| 长岛县| 敖汉旗| 兴义市| 涿鹿县| 遂平县| 宁陕县| 明水县| 鹤庆县| 宝鸡市| 巴楚县| 韶关市| 香格里拉县| 景宁| 襄城县| 屯昌县| 南开区| 开原市| 龙州县| 招远市| 沧州市| 澜沧| 东阳市| 明溪县| 黔南| 灌南县| 七台河市| 凉城县| 高台县| 云林县| 桓仁| 南平市| 酒泉市| 金山区| 井陉县| 天津市| 白山市| 淄博市|