国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Java 中程序內存的分析

詳解Java 中程序內存的分析

2020-09-16 15:43Java之家 Java教程

這篇文章主要介紹了詳解Java 中程序內存的分析的相關資料,需要的朋友可以參考下

這篇文章將簡單的說明下當我們運行java程序時jvm(java虛擬機)的內存分配情況。

首先我們先來感觀的認識下幾個名詞:

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

2、堆,一般用來存放用關鍵字new出來的數據。

接下來我們再通過一段程序來直觀感受下程序運行時jvm的內存情況,

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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());
  }
}

當我們運行程序時,jvm會把student類與studentdemo類編譯完然后加載到jvm中一個叫方法區的地方,類的成員變量與成員方法也被加載到方法區中,此時內存模型如下

詳解Java 中程序內存的分析

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

詳解Java 中程序內存的分析

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

詳解Java 中程序內存的分析

第12行,這時student對象調用study方法,jvm在棧空間中為study方法申請了一塊內存空間

詳解Java 中程序內存的分析

study方法執行完后,立即釋放棧空間,代碼第14行,student2對象的引用指向了student所指向的地址

詳解Java 中程序內存的分析

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

詳解Java 中程序內存的分析

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

詳解Java 中程序內存的分析

代碼執行結果如下:

?
1
2
3
4
5
null:0
john:23
i love study!
jack:25
jack:25

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

原文鏈接:http://blog.csdn.net/lin353809836/article/details/69367482

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久精品小视频 | 久久免费福利视频 | 免费国产一区 | 在线国产一区二区 | 国产99久久| 视频四区 | 日韩在线免费播放 | 成年人免费在线播放视频 | 日韩成人免费 | 久久久国产一区 | 天堂资源在线 | www.午夜 | 国产精品自产拍在线观看 | 君岛美绪一区二区三区 | 在线观看91 | 欧州一区二区三区 | 免费观看一区二区三区毛片软件 | 在线中文视频 | 操操操操操操操 | 国产精品自拍视频 | 日日撸 | 日韩精品一区二区三区中文字幕 | 在线观看国产精品一区 | 婷婷色综合 | 成人在线免费观看 | 91久久国产精品 | 国产噜噜噜噜噜久久久久久久久 | 国产3区 | 免费a视频 | 日本精品久久久 | 特级西西人体4444xxxx | 麻豆91在线观看 | 国产精品网站在线观看 | 人人添人人添 | 日韩精品一区二区三区第95 | 久久蜜桃精品一区二区三区综合网 | 一本一道久久久a久久久精品91 | 亚洲精品在线观看av | 亚洲一区 日韩精品 中文字幕 | 中文字幕在线三区 | 这里有精品视频 |