在開始學習數據結構以前,先對java的變量的特性作一個瞭解java
名稱 | 特徵 | 做用 | 配置參數 | 異常 |
---|---|---|---|---|
程序計數器 | 佔用內存小,線程私有,生命週期與線程相同 | 大體爲字節碼行號指示器 | 無 | 無 |
虛擬機棧 | 線程私有,生命週期與線程相同,使用連續的內存空間 | Java 方法執行的內存模型,存儲局部變量表、操做棧、動態連接、方法出口等信息 | -Xss | StackOverflowErrorOutOfMemoryError |
java堆 | 線程共享,生命週期與虛擬機相同,能夠不使用連續的內存地址 | 保存對象實例,全部對象實例(包括數組)都要在堆上分配 | -Xms-Xsx-Xmn | OutOfMemoryError |
方法區 | 線程共享,生命週期與虛擬機相同,能夠不使用連續的內存地址 | 存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據 | -XX:PermSize:16M-XX:MaxPermSize64M | OutOfMemoryError |
運行時常量池 | 方法區的一部分,具備動態性 | 存放字面量及符號引用 |
這是java最多見內存管理模型,在這篇文章中重點討論的是虛擬機棧和java堆,具體的特徵和做用在表中可見。數組
java的基本數據類型共有8種,即int,short,long,byte,float,double,boolean,char。經過常見的變量聲明方式,好比a=2;來定義。數據結構
當java編譯器運行時,遇到a=2;這一行,它會首先在棧中建立一個變量爲a的引用,而後查找有沒有字面值爲2的地址,有的話則讓a指向2,沒有則開闢一個內存地址存儲2,而後讓a指向這個地址。函數
以上全部操做涉及到底內存區域都是在棧中完成的學習
當java編譯器運行時,遇到聲明對象的時候,好比 Object a=new Object();,它會在棧區爲a分配內存空間。此時的a是一個引用變量。而後會在堆區分配內存,裏面保存對象的相關數據。最後讓a指向堆區的地址spa
public class test {
public static void main(String[] args) {
int a = 1;
test(a);
System.out.println("a的值是:"+a);
Integer c=2;
test(c);
System.out.println("c的值是:"+c);
}
public static void test(int b) {
b = 3;
}
}
複製代碼
這裏使用基本數據類型和包裝類,能夠看到值並無被更改線程
public class Test {
public static void main(String[] args) {
Test1 test1 = new Test1();
test1.number = 0;
test(test1);
System.out.println("test1的number:" + test1.number);
}
public static void test(Test1 test1) {
test1.number = 100;
}
}
class Test1 {
int number;
}
複製代碼
這裏使用的是對象,能夠看到屬性被修改了。code
之後的數據結構的學習就基於以上的特色。由於java是面向對象的語言,因此後面不管是哪一種數據結構,都是經過對象和對象嵌套實現的。對象