程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 內存的劃分 & 程序代碼運行時內存工作流程,內存劃分

內存的劃分 & 程序代碼運行時內存工作流程,內存劃分

編輯:JAVA綜合教程

內存的劃分 & 程序代碼運行時內存工作流程,內存劃分


內存的劃分:
  1,寄存器。
  2,本地方法區。
  3,方法區。
  4,棧內存。
    存儲的都是局部變量。
    而且變量所屬的作用域一旦結束,該變量就自動釋放。

  5,堆內存。
    存儲是數組和對象(其實數組就是對象) ,凡是new建立的都在堆中。
    特點:
    1)每一個實體都有首地址值。
    2)堆內存中的每一個變量都有默認初始化值,根據類型的不同而不同。整數是0,小數0.0或者0.0f,boolean類型是false,char類型是 '\u0000',引用數據類型是NULL
    3)垃圾回收機制。

全局變量和局部變量的區別:

  局部變量是定義在方法內的變量,在其作用域結束時被釋放;

  全局變量是定義在方法外的變量。

程序代碼運行時內存工作流程演示:

  演示代碼:

 1 class  Demo2
 2 {
 3     public static void main(String[] args) 
 4     {    
 5         int[] arr = new int[3];
 6         arr[2] = 5;
 7         System.out.print(arr[2]);
 8         
 9     }
10 }

 

  演示圖解:

  文字說明:

    1)在棧內存中為main函數開辟一個內存空間;

    2)在main的內存空間為局部變量arr開辟一個內存空間;

    3)在堆內存中開辟一個內存空間存放實體數組,數組自動初始化;

    4)將堆內存中開辟的數組首地址傳給棧內存中的局部變量arr;

    5)arr[2]的值修改;

    6)控制台上打印arr[2]的值。

  tips:

    1)數組的確定必須明確其長度;

    2)堆內存中的實體會自動初始化,而棧內存中不會,並且棧中未初始化會在編譯時報錯;

    3)堆內存中開辟給數組的空間首地址傳給棧內存的數組名變量,數組名變量保存值為 [I@哈希值 ;( [ 表示引用指向數組,I 表示引用指向數組為int型,@之後是哈希值,通過哈希值計算得出引用在堆內存中的首地址)

  數組代碼常見異常:

    1)ArrayIndexOutOfBoundsException:(此異常在編譯時通過,在運行時報錯)

      當訪問到數組中不存在的角標時,就會發生該異常。

    2)NullPointerException:(此異常在編譯時通過,在運行時報錯)

      當引用型變量沒有任何實體指向時,還在用其操作實體,就會發生該異常。

  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved