Java內存機制

Java 內存機制

學習Java內存機制

基本類型 VS 引用類型

  1. 基本類型,它的值就是一個數字,一個字符或一個布爾值。java中有四類八種:
    四類:1,整型 2,浮點型 3,字符型4,邏輯型
    八種:byte,short,char,int,long,float,double,boolean
  2. 引用類型:是一個對象類型,值是什麼呢?它的值是指向內存空間的引用,就是地址,所指向的內存中保存着變量所表示的一個值或一組值。1

堆和棧 2

Java中的內存分爲堆和棧。
棧:
1. 基本類型的變量和對象或者數組的引用變量會被存放在棧裏,
2. 當在一段代碼塊定義一個變量時,Java就在棧中爲這個變量分配內存空間,當超過變量的作用域後,Java會自動釋放掉爲該變量所分配的內存空間,該內存空間可以立即被另作他用。
3. 優勢是存取速度快,存在棧中的數據可以共享
4. 缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。

堆:
1. 堆內存用來存放由new創建的對象和數組。
2. 在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。
3. Java的堆是一個運行時數據區,堆是由垃圾回收來負責的
4. 堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,
5. 缺點是,由於要在運行時動態分配內存,存取速度較慢。

因其各自的優勢,棧被用來執行程序,堆被用來存放對象。
與C++不同,Java自動管理棧和堆,程序員不能直接地設置棧或堆。

總結

一張圖總結下以上說的內容:
Java內存機制

應用

  1. C/C++的函數中返回一個數組(局部變量)的指針是會造成錯誤的,Java中爲什麼就能返回一個局部變量表示的數組呢? 代碼註釋中給了一種解釋3,還有一種解釋是該java程序是通過new來創建數組的,在C++中如果也通過new的方式來創建數組的話,也是可以返回數組指針的。4
private static int[] Create_Array(int len){
    // array放在堆中 在 java 裏,由於是進行引用傳遞,他會在每一次對象賦值的時候進行引用計數,
    // 如果計數不爲0,就不會回收局部變量,那麼也就不會造成消失的問題 也就是當沒有引用指向它的時候,
    // 垃圾收集器會在適當的時候 把他清除。以上就是JAVA運行機制中的一部分(垃圾收集)
    int[] array = new int[len];

    // 生成隨機數
    for(int i = 0; i < len; i ++){
        array[i] = (int)(Math.random() * 100);
    }
    return array;
}
  1. 待續

  1. java中的引用類型和值類型的區別 https://juejin.im/post/59fd383a51882561a3264e4d
  2. Java內存機制,內存地址 http://www.cnblogs.com/IT-Monkey/p/3640596.html
  3. Java和C的區別:關於調用函數返回局部變量 https://bbs.csdn.net/topics/390901375
  4. 【C++基礎之三】函數中局部變量的返回 https://blog.csdn.net/jackystudio/article/details/11523353
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章