java对象内存布局

现有一个对象

melo.name = "卡梅隆安东尼";
 melo.num = 7;
 melo.age = 37;

 

此对象各数据在内存中布局为

java计算对象的内存大小 java对象内存空间分配安排_对象名

对象名就像是人的名字,堆区和方法区的那些数据才是实实在在的人,有这个名字很重要,只有这样你与别人谈到这个人,别人才会知道你在说谁,你跟计算机说想访问这个对象,计算机也是因为有这个对象名字才知道你想要的对象是哪个。

 

java对象内存分配步骤

现在看一段代码

class Player{
int age = 18;
String name;
int num ;
public Player(String pName,int pAge,int pNum){
name = pName;
age = pAge;
num = pNUM;
  }
}
player melo = new player("卡梅隆安东尼",37,7); 
player anthony = melo;

 

第一步,方法区里加载该类信息(属性和方法),ps:若之前加载过一次,则无需再次加载

java计算对象的内存大小 java对象内存空间分配安排_对象名_02

 

 

 

第二步,在堆区创建melo这个对象,此时成员们都是默认值

java计算对象的内存大小 java对象内存空间分配安排_全局变量_03

 

 

ps:即使全局变量在构造器的后面才定义,也是先进行全局变量初始化,个人理解这样的目的是,很多时候构造器是对全局变量进行操作,那么如果构造器先于全局变量进行操作,那么可能根本就执行不了。

java计算对象的内存大小 java对象内存空间分配安排_对象名_04

 

第四步,再进行构造器的初始化

java计算对象的内存大小 java对象内存空间分配安排_java计算对象的内存大小_05

 

 

第五步,在栈中创建该对象名,并把堆中该对象所在的地址赋给对象名

java计算对象的内存大小 java对象内存空间分配安排_构造器_06

 

 

 

第六步,在栈中创建anthony对象名,并指向堆中的melo

java计算对象的内存大小 java对象内存空间分配安排_全局变量_07