您的位置 首页 java

java值传递和堆heap内存垃圾回收

/**

* java 值传递和堆heap内存垃圾回收

*/

public class Student {

String name;

int age;

Student friend;

//引用类型

public static void main(String[] args) {

Student s1 = new Student();

//新对象地址赋值给s1

s1.age = 10;

Student s2 = s1;

//将s1的值赋值给s2 s2和s1地址相同,也指向同一个对象

s2.age = 20;

System.out.println(s1.age);

//s2地址指向的对象更改了age=20 s1指向的同一个对象 对象的属性改变了,s1只是对象的地址,所以s1.age随对象改变

int age = 1;

//类的成员变量age和方法的局部变量age不冲突

int age1 = age;

age1 = 3;

System.out.println(age);

//s1s2是引用地址 age1是数值和age=1不影响

Student s3 = new Student();

s1.friend = s3;

s3.friend = s1;

//s1和s3相互引用

s1 = null;

s2 = null;

s3 = null;

//将s1s2s3赋值null空 堆heap中对象不被引用 视为 垃圾

//两个对象互相引用,没有来自程序的引用,不再起作用同样视为 垃圾

/*堆内分为年轻代、年老代(方法区也属于堆)

新建 对象存储 于年轻代内的Eden区,当Eden区满了会触发Minor GC 清理掉年轻代各区的 垃圾

清理后存活的对象被转移至survivor区1区,survivor分1区和2区,每次Minor GC会把区内存活的对象转移到另外一个区

对象被转移15次以上依然存活,被转移至年老代Tenured区

年老代满了会触发Major GC 清理年老代内的垃圾

Full GC 会清理年轻代、年老代、方法区的垃圾,成本较高

*/

}

}

文章来源:智云一二三科技

文章标题:java值传递和堆heap内存垃圾回收

文章地址:https://www.zhihuclub.com/181028.shtml

关于作者: 智云科技

热门文章

网站地图