java内存图解

Java内存图解

首先我们先看一段代码。

class Time1
{
	private int hour;
	private int minute;
	private int second;
	public Time1(int h,int m,int s)//Time1方法
	{
		setTime(h,m,s);//进入setTime方法
	}
	public void setTime(int h,int m,int s)//setime方法
	{
		hour=((h>=0&&h<24)?h:0);
		minute=((m>=0&&m<60)?m:0);
		second=((s>=0&&s<60)?s:0);
		
	}
	public void say()//say方法
	{
		System.out.println(hour+":"+minute+":"+second);//输出
	}
}
	public class  MyTime1
	{
		private static Time1 t3;//创建一个t3对象
		public static void main(String args[]) //main方法压栈
		{
			t3=new Time1(11,22,33);//进入Time1方法并赋值
			t3.say();//进入say方法
		}
	}

根据这段代码我们画出它的内存图解

内存图

这个图的意思是:

一,栈

1,main方法压栈,创建了一个叫t3的对象。
2,main方法中顺序执行进入了Time1方法,Time1方法进栈,并给Time1方法的变量h,m,s赋值。
3,Time1方法中进入了setTime方法,setTime方法进栈。
4,执行完setTime方法后,seTime方法出栈,回到了Time1方法。
5,执行完Time1方法后,Time1方法出栈,回到了main方法。
6,main方法顺序执行又进入了say方法,say方法进栈。
7,执行say方法的println,执行完后say方法出栈,回到main方法。
8,main方法继续执行,执行完后mian方法出栈。

ps:方法调用结束后,局部变量会释放。

二,堆

main方法创建了一个叫t3的对象,存在于堆中。对象中含有this,说明对象的地址。在main方法的t3中有它的地址。如图所示。
在堆中还含有常量池。

三,方法区内存

如图所示,存有MyTime1.class,代码块,和以static修饰的方法等等。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值