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修饰的方法等等。。。