Java虛擬機內存分析
阿新 • • 發佈:2018-04-29
有一個 構造 pri 自動創建 被調用 .com alt 相關 study
Java虛擬機的內存可以分為三個區域:棧stack、堆heap、方法區method area
棧
- 棧描述的是方法執行的內存模型,每個方法被調用都會創建一個棧幀
- JVM為每個線程創建一個棧,用於存放該線程執行方法的信息
- 棧屬於線程私有,不能實現線程間的共享
- 先進後出
- 棧是由系統自動分配,速度快!棧是一個連續的內存空間
堆
- 堆用於存儲創建好的對象和數組
- JVM只有一個堆,被所用線程共享
- 堆是一個不連續的內存空間,分配靈活,速度慢
方法區
- JVM只有一個方法區,被所有線程共享
- 方法區實際也是堆,只是用於存儲類、常量相關信息
- 用於存放程序中永遠是不變或者唯一的內容。(類信息、靜態變量、字符串常量)
示例代碼:
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; }
內存圖:
Java虛擬機內存分析