java内存详解_java内存解析

ass BirthDate{

private int day;

private int month;

private int year;

public BirthDate(int d;int m,int y){

day = d;

}

public void setDay( int d){

day = d;

}

public void setMoth(int m){

month = m;

}

public void setYear(int y){

year = y;

}

public int getDay(){

return day;

}

public int getMonth(){

return month;

}

public int getYear(){

return year;

}

public void display(){

System.out.println(day+"-"+month+"-"+year);

}

}

public class Test{

public static void main(String args[]){

Test test = new Test();

int date=9;

BirthDate d1 = new BirthDate(7,7,1970);

BirthDate d1 = new BirthDate(1,1,2000);

test.change1(d1);

test.change2(d2);

System.out.println("adte="+date);

d1.display();

d2.display();

}

public void change1(int i){

i = 1234;

}

public void change2(BirthDate b){

b =  new BirthDate(22,2,2004);

}

public void change3(BirthDate b){

b.setDay(22);

}

}

执行Test test = new Test();的时候调用Test的构造方法,int date = 9;在占内存里分配一个变量date等于9, 执行这句话的时候BirthDate d1= new BirthDate(7,7,1970);在占内存里分配一个变量叫d1:xxx指向堆内存里new出来的的一块内存,内存如图:

b83c1159a4cb8a910d790028fddbce7e.png

当执行完BirthDate d1= new BirthDate(7,7,1970);之后,方法完成之后为这个方法分配的局部变量消失所以内存图变成如下图所示:

30e51a0f6adf88819f0d814efb487e56.png

BirthDate d2= new BirthDate(1,1,2000);   同上述一样;

当执行test.change1(date);这句话时,在调用change1这个方法,这时的i=9;之后,i变成 了1234,当方法执行完毕之后,分配给这个方法的局部变量消失,所以这个方法相当于白调用,栈内存变化如图:

b77e64572cae490c3122cff0eaad27b7.png   

9cabae93d05c750a380ca888d23235d0.png   

d51af5bcf3f2255390dac9efe9fe525f.png

当执行这句话时,test.change2(d1);在堆内存里分配new 出来的一块内存 b这个BirthDay的类型指向new 出来的对象之后,执行完方法之后,为这个方法分配的局部变量消失,没有一个变量指向new出来的新的对象,最后由java的垃圾回收机制回收掉;

当执行test.change3(d2);这段代码时,调用change3这个方法,BirthDay的变量b指向的是d2的setDay这个方法,并且在占内存里有一个变量d ,d的值为22,将22赋值给day,方法完成之后,堆内存里的day由1变成了22,最后方法执行完成之后,d这个变量消失最终的内存图为

81796cf6f2c1662a8c42be066f605ce6.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值