堆内存可以被多个栈内存调用
栈内存存放内存地址。
堆内存是内容
per1 per2都有各自的指向,如果把per1的地址内容给了per2,则需要先把per2原先的与内容的连接断开。 原先per2所指向的堆内存是为垃圾内存。
再重新操作per2,则输出的是更改过的per2的内容。
垃圾空间是指没有栈内存指向的堆内存。会被GC garbage collecter收集。gc影响性能,故而要控制对象的产生数量,也即少产生无用的对象。
堆内存可以被多个栈内存调用
栈内存存放内存地址。
堆内存是内容
per1 per2都有各自的指向,如果把per1的地址内容给了per2,则需要先把per2原先的与内容的连接断开。 原先per2所指向的堆内存是为垃圾内存。
再重新操作per2,则输出的是更改过的per2的内容。
垃圾空间是指没有栈内存指向的堆内存。会被GC garbage collecter收集。gc影响性能,故而要控制对象的产生数量,也即少产生无用的对象。
1.一块堆内存可以被多个栈内存所指向。
2.所谓的垃圾空间指的就是没有任何栈内存所指向的堆内存。所有的垃圾空间将会被垃圾收集器回收以释放内存。
Garbage Collection 才对
2.4 引用传递初次分析
所有初学者最难的部分就是 引用传递分析。以后的开发之中都是引用传递。
引用传递的本质就在于别名,而这个别名只不过是放在了栈内存之中,即:一块堆内存可以被多个栈内存所指向。
范例:观察引用传递
//引用传递
class Person{//定义一个类,类名称要求首字母大写
String name;
int age;
public void info() {
System.out.println("name = "+ name + ",age = " + age);
}
}
public class Class2{
public static void main(String args[]) {
//类名称 对象名称 = new 类名称();
Person kai = new Person();//声明一个新的对象
kai.name = "王凯";
kai.age = 23;
Person wang = kai;
wang.name = "小王";
kai.info();
}
}
此程序的执行观察时需要通过内存关系图来进行:
范例:观察引用传递
//引用传递
class Person{//定义一个类,类名称要求首字母大写
String name;
int age;
public void info() {
System.out.println("name = "+ name + ",age = " + age);
}
}
public class Class4{
public static void main(String args[]) {
//类名称 对象名称 = new 类名称();
Person per1 = new Person();//声明一个新的对象
Person per2 = new Person();
per1.name = "wangkai";
per1.age = 23;
per2.name = "kai";
per2.age = 23;
per2 = per1;
per2.name = "hello";
per2.info();
}
}
观察此时的内存分析图:
在程序开发过程之中,所谓的垃圾空间指的就是没有任何栈内存指向的堆内存空间,所有的垃圾空间将不定期被java中的垃圾收集器(GC,Garbage Collector)进行回收以实现内存空间的释放,不过从实际开发来讲,虽然java有提供gc,但是gc也会造成程序性能的下降,所以开发过程之中一定要控制你对象的产生数量,即:无用的对象尽可能的少产生。
引用传递初次分
引用传递的本质在于别名,一块堆内存可以被多个栈内存所指向。
Person per1=new Person();
per1.name="小宇子";
per1.age=30;
//此步骤就是引用传递的操作
Person per2=per1;//采用同样的类型接收
per2.name="狗剩";//设置一个名字
per1.info();
内存关系图
Person per1=new Person();
Person per2=new Person();
per1.name="小宇子";
per1.age=30;
per2.name="张三";
per2.age=20;
per2=per1;
per2.name="狗剩";
per2.age=30;
per1.info();
内存关系图
在程序开发过程中,所谓的垃圾空间指的就是没有任何栈内存指向的堆内存空间,所有的垃圾空间将不定期被java垃圾收集器(GC Garbage Collector)进行回收以实现内存空间的释放,从实际开发来讲,虽然java有GC,但是GC会降低程序的性能,所以在开发中一定要控制好对象的产生数量,即:无用的对象尽可能少产生。
引用传递本质在于别名,放在栈内存中,一个堆内存空间
当两个对象引用同一内存地址时,无论任何一方属性发生改变,另一方的属性也会同时发生改变
垃圾空间:没有任何栈内存指向的堆内存空间,将不定期的GC回收。
Person per2 = per1;
未开辟新的堆内存;栈内存存储的地址指向同一堆内存。
修改per2的对象属性,然后输出per1的对象属性。
若使用per2 = per1 ;
会导致per2原来指向的堆类存会变成垃圾空间。
引用传递的本质是别名,别名存在栈内存中,一块堆内存可以被多个栈内存指向
没有任何栈内存指向的堆内存空间叫做垃圾空间。
GC(垃圾收集器)收集垃圾空间