Java基础--引用类型内存分析及垃圾产生

引用数据类型的本质:使用new关键字开辟一块新的堆内存,可以被多个栈内存指向。
在这里插入图片描述

引用传递:

同一类型的引用数据类型可以进行引用传递,即:

	Person per1 = new Person();
	Person per2 = per1;

此时Person per2 = per1;语句执行完毕没有开辟新的内存,per2与per1指向同一个堆内存。
在这里插入图片描述

在有引用传递的情况下进行赋值

实例代码

class Person{
    String name;
    int age;
    public void tell(){
        system.out.println("姓名:" + name +",年龄:" + age);
    }
}
	Person per1 = new Person();
	per1.name = "张三" ;
	per1.age = 18;
	Person per2 = per1;//引用传递
	per2.age = 20; //修改堆内存空间中的 age 属性的值
	per1.tell();//输出结果为 姓名:张三,年龄:20

内存分析

在进行引用传递时,per2与per1指向同一个引用,此时修改per2的age属性,即为在堆内存中修改age属性的值,所以,在进行输出per1时,per1的age也被改为20.
在这里插入图片描述

垃圾的产生

垃圾的产生:在进行实例化引用数据类型时,需要使用new关键字来从堆内存空间中开辟一块新的内存空间,而在此时如果有进行了引用传递,那么没有被栈内存指向的堆内存空间就变成了垃圾,经过一段时间后会被GC垃圾回收机制进行清理,而如果频繁的使用new关键字进行开辟内存空间,当垃圾产生的足够多时,就会影响性能。

实例代码

class Person{
    String name;
    int  age;
    public void tell(){
        System.out.println( "姓名:"+name + ",年龄:" + age);
    }
 		Person per1 = new Person();//使用new关键字实例化对象
        Person per2 = new Person();
        per1.name = "张三"; per1.age = 10 ;
        per2.name = "李四"; per2.age = 20;
        per2 = per1;//引用传递产生垃圾

内存分析在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值