Java虛擬機的內存可以分爲三個區域:
棧 stack
堆 heap
方法區 method area
棧
1.棧描述的是方法執行的內存模型。每個方法被調用都會創建一個棧幀(存儲局部變量、操作數、方法出口等)
2.JVM爲每個線程創建一個棧,用於存放該線程執行方法的信息(實際參數、局部變量等)
3.棧屬於線程私有,不能實現線程間的共享
4.棧的存儲特性是“先進後出,後進先出”
5.棧是由系統自動分配,速度快。棧是一個連續的內存空間
堆
1.堆用於存儲創建好的對象和數組(數組也是對象)
2.JVM只有一個堆,被所有線程共享
3.堆是一個不連續的內存空間,分配靈活,速度慢
方法區(又叫靜態區)
1.JVM只有一個方法區,被所有線程共享
2.方法區實際也是堆,只是用於存儲類、常量相關的信息
3.用來存放程序中永遠是不變或唯一的內容(類信息[class對象]、靜態變量、字符串常量等)
public class SxtStu {
//屬性fields
int id;
String sname;
int age;
Computer comp; //計算機
//方法
void study(){
System.out.println("我在認真學習!!,使用電腦:"+comp.brand);
}
void play(){
System.out.println("我在玩遊戲!王者農藥!");
}
//構造方法。用於創建這個類的對象。無參的構造方法可以由系統自動創建。
SxtStu(){
System.out.println("調用了無參的構造方法!");
}
//程序執行的入口,必須要有
//javac Sxtstu.java , java Sxtstu
public static void main(String[] args) {
SxtStu stu = new SxtStu(); //創建一個對象
stu.id=1001;
stu.sname= "高淇";
stu.age = 18;
Computer c1 = new Computer();
c1.brand = "聯想";
stu.comp = c1;
stu.play();
stu.study();
}
}
class Computer {
String brand;
}
如上代碼,分析圖如下