JAVA物件在JVM中記憶體分配
如果你還不瞭解JVM記憶體模型的建議您先看下JVM記憶體模型
以一下程式碼為例,來分析下,java的例項物件在記憶體中的空間分配(JDK1.8)。
public class Student {
private String name;
private static Birthday birthday = new Birthday();
public Student(String name) {
this.name = name;
}
public static void main(String[] args) {
Student s = new Student("zhangsan");
int age = 10;
System.out.println(age);
}
}
class Birthday {
private int year = 2010;
private int month = 10;
private int day = 1;
}
以Student類執行到main方法的最後一行時來分析java例項物件在記憶體中的分配情況。
如下圖:
圖畫的稍微有點問題,不過能說明物件在記憶體中的大致位置。
從圖中我們可以看出,普通的java例項物件記憶體分配,主要在這三個區域:虛擬機器棧、堆、方法區。
從記憶體區域來分析
- 虛擬機器棧:只存放區域性變數
- 堆:儲存物件的例項
- 方法區:存放Class資訊和常量資訊。
從變數的角度來分析
-
區域性變數:存放在虛擬機器棧中(具體應為[棧->棧幀->區域性變數表])
- 基本型別的值直接存在棧中。如age=10
- 如果是物件的例項,則只儲存物件例項的引用。如s=ref
- 例項變數:存放在堆中的物件例項中。如Student的例項變數 name=ref
-
靜態變數:存放在方法區中的常量池中。如Student.class中的birthday=ref。
- 如果常量的型別是物件的例項則只儲存物件例項的引用地址
通過變數的角度來分析,我們就可以瞭解為什麼靜態變數不用new就能呼叫,而例項變數必須new出物件,才能呼叫。
想了解更多精彩內容請關注我的公眾號
相關文章
- java jvm 記憶體分配JavaJVM記憶體
- JVM記憶體分配JVM記憶體
- JVM 記憶體模型 記憶體分配,JVM鎖JVM記憶體模型
- JVM中java例項物件在記憶體中的佈局JVMJava物件記憶體
- Java中物件並不是都在堆上分配記憶體的。Java物件記憶體
- JVM深入淺出 -- Java記憶體分配機制JVMJava記憶體
- JVM記憶體結構、Java記憶體模型和Java物件模型JVM記憶體Java模型物件
- JVM GC 與 記憶體分配策略JVMGC記憶體
- java記憶體分配Java記憶體
- JVM基礎:JVM記憶體組成及分配JVM記憶體
- Java物件記憶體分配原理及原始碼分析Java物件記憶體原始碼
- JVM 之 記憶體分配與回收策略JVM記憶體
- JVM垃圾回收和記憶體分配策略JVM記憶體
- Java 記憶體分配策略Java記憶體
- 淺談JVM記憶體結構 和 Java記憶體模型 和 Java物件模型JVM記憶體Java模型物件
- JVM的藝術-物件建立與記憶體分配機制深度剖析JVM物件記憶體
- GO slice 切片-在記憶體中如何分配Go記憶體
- 物件的建立與記憶體分配物件記憶體
- jvm:記憶體模型、記憶體分配及GC垃圾回收機制JVM記憶體模型GC
- 面試題:JVM在Java堆中對物件的建立、記憶體結構、訪問方式面試題JVMJava物件記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- 淺談JVM記憶體分配與垃圾回收JVM記憶體
- JVM——垃圾收集器與記憶體分配JVM記憶體
- java虛擬機器 jvm 出入java棧 棧空間記憶體分配Java虛擬機JVM記憶體
- java基礎-記憶體分配Java記憶體
- java-方法記憶體分配Java記憶體
- Java 堆疊記憶體分配Java記憶體
- Java是否可以棧上分配物件記憶體? 為什麼?Java物件記憶體
- JVM -- 物件的記憶體佈局JVM物件記憶體
- JVM-物件及物件記憶體佈局JVM物件記憶體
- 一夜搞懂 | JVM GC&記憶體分配JVMGC記憶體
- 一個可以參考的JVM記憶體分配JVM記憶體
- JVM 垃圾收集器與記憶體分配策略JVM記憶體
- JVM垃圾回收器、記憶體分配與回收策略JVM記憶體
- 深入理解JVM虛擬機器-物件引用,GC與記憶體分配回收JVM虛擬機物件GC記憶體
- 【Java】 記憶體分配全面淺析Java記憶體
- JVM讀書筆記之垃圾收集與記憶體分配JVM筆記記憶體
- 解析Java物件引用與JVM自動記憶體管理(轉)Java物件JVM記憶體