Java中一个对象的内存图

以以下代码为例来分析Java中一个对象的内存图。

public class Demo1_car {
	public static void main(String args[])
	{
		Car c1=new Car();//创建对象
		//调用属性
		c1.color="red";
		c1.num=8;
		c1.run();
	}
}
/*
 车的属性:颜色,轮胎数目
 车的行为:运行
 */
class Car{
	String color;
	int num;
	public void run()
	{
		System.out.println(color+"……"+num);
	}
}

这里就涉及到了方法区的知识点。方法区的定义百度上都有,这里就做简单的介绍。方法区,即代码仓库。代码编译时,源文件变为字节码文件,而字节码文件本来是放在硬盘上的;运行之后,字节码文件就要进入内存,即进入了方法区。

1、编译运行的是Demo1_car,所以Demo_car.class先进入方法区; 

2、虚拟机调用main方法,让main方法进栈;

3、main方法进栈后,使用Car 创建对象,所以要现在内存中加载Car.class文件,Car.class文件有对应的成员变量和成员方法。

 4、有了Car.class文件后创建对象Car c1;

 

5、new出来的对象需要进入堆中,其成员变量有系统给出的对应的初始值; 

6、然后将堆中的地址赋值给c1,c1通过地址可以找到该类所在的地方; 

7、下面就是对成员变量进行赋值; 

8、下面调用run方法,run方法进栈; 

9、run方法调用结束后,弹栈 

最后,如果将c1=null然后调用run()会如何呢?会出现空指针异常,因为c1将不再指向对象。如果没有任何引用指向该对象 ,那么该对象就会变成垃圾,java中有完善的垃圾回收机制,会不定时对其进行回收。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值