java学习笔记-面向对象01——java虚拟机内存分析;栈,堆和程序运行的分析

java的虚拟机可分为3个部分栈steak,堆stack,方法区method area

栈:

1.栈描述的是一个内存模型,每个方法调用都会在栈中创建一个栈桢,存储局部变量,操作数,方法出口等。
2.栈 先进后出,自下而上存储
3.方法执行完毕,自动释放空间(关闭栈桢)

堆:

1.用于存储创建好的对象和数组(也是对象)
2.只有一个堆,为所有线程共享,用垃圾回收器回收

方法区:

1.存放类的信息(代码),static变量,字符串常量等,也是堆,可以理解为在堆内。

分析以下代码的运行顺序和再内存中的存储过程

代码后附有 详解内存空间分析图
public class SxtStu {

	//属性fields
	int  id;
	String  sname;
	int  age;	
	Computer  comp;  //计算机
	//方法
	void  study(){
		System.out.println("我在认真学习!!,使用电脑:"+comp.brand);
	}
	
	void  play(){
		System.out.println("我在玩游戏!王者农药!"); 
	}
	
	//构造方法。用于创建这个类的对象。无参的构造方法可以由系统自动创建。
	SxtStu(){
		System.out.println("调用了无参的构造方法!");
	}
	
	//程序执行的入口,必须要有
	//javac  Sxtstu.java   ,   java Sxtstu
	public static void main(String[] args) {
		SxtStu  stu = new SxtStu();   //创建一个对象
		stu.id=1001;
		stu.sname= "高淇";
		stu.age = 18; 
		
		Computer  c1 = new Computer();
		c1.brand = "联想";
		
		stu.comp = c1;
		
		stu.play();
		stu.study();
		
	}
}

class  Computer {
	String  brand;
}

分析:
第一步:javac编译
第二步:java.SxtStu,启动虚拟机,加载内存空间,将SxtStu类信息放入方法区,如图
第三步:public static void main(String[] args) ;调用SxtStu类中的main()方法,是程序执行的入口;在栈中创建一个main()方法的栈桢,如图

第四步:new SxtStu(); 调用构造方法lSxtStu(),在堆中创建新的栈桢,根据堆中类的信息,在堆中创建一个对象,该对象有类中的属性和方法,暂时值为null,没有赋值,如图。

第五步:SxtStu stu = new SxtStu(); =赋值,将该对象的地址赋值给 stu,这样可以通过stu找到该对象,或者stu就是该对象了

第六步: stu.sname= “高淇”;stu.age = 18; 给对象的属性赋值,其中sname的字符串在方法区中找,如图

第七步:Computer c1 = new Computer();类似上边,调用 Computer()方法创建对象,将该对象赋值给c1,将方法区中的 “联想” 赋值给bread

第八步:执行stu.comp = c1; 将c1的值赋值给comp ,内存如图

第九步:调用 stu.play();stu.study(); 如图是内存运行过程

此图片和上边的程序,步骤匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值