java基础教程2---->程序执行过程映射到内存怎么变化

本文通过一个简单的Java学生类实例,详细解析了对象在内存中的创建、引用传递及垃圾回收过程,帮助理解Java内存模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家先看看下面这段简单的代码,我将使用这段代码带领大家模拟程序在内存中怎么变化的?

public class Student {
public String name;
public int age;
public int number=9;
public Student(String _name,int _age){
this.name=_name;
this.age=_age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
//传递引用
public void changeStudent(Student s1){
s1=new Student("王五",25);
System.out.println(s1.getName()+"s1=====>"+s1.getAge());
}
public void changeAntherStudent(Student s2){
s2=new Student("李四",35);
}
public void changeName(Student s1,String name1){
s1.setName(name1);
}
/**
* @param args  测试方法
*/
public static void main(String[] args) {
String name="陈凯歌";//第一步
Student oneStu=new Student("张艺谋",45);//第二步
oneStu.changeStudent(oneStu);//第三步
       
Student twoStu=new Student("章子怡",33);//第四步
twoStu.changeAntherStudent(twoStu);//第五步
oneStu.changeName(oneStu,name);//第六步
System.out.println(oneStu.getName());//第七步
}
}

当程序进入main方法之后执行到第一步的时候,内存的的变化如下:


程序执行到第二步的时候,内存如下分配:


第二部结束之后,也就是构造方法调用完之后内存如下:


局部变量在作用域外,会立刻释放掉内存 .

程序执行到第三部的时候,内存如下:


当第三步结束之后,内存如下: 因为局部变量S1是要被内存马上回收的 所以S1会马上消失:

那么有的同学会问 那么S1引用的堆里面的东西什么时候消失了,其他在堆中存在的王五这个 已经跟垃圾没什么两样,因为没有任何内容引用他,他将会在某一时候被垃圾回收器 收回.


第四步跟第五步 我就不带大家做了 跟上面的是一样的,也就是说,这几步看起来是无用功,并没有改变原有对象里面的内容.

内存结构如下:


当程序执行到第六步的时候,内存的分布如下:



最终内存分布如下:


[输出结果如下:]

王五s1=====>25
张艺谋=====>45
陈凯歌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值