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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部