欢迎光临散文网 会员登陆 & 注册

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

2022-06-14 13:00 作者:虚云幻仙  | 我要投稿

/**
* 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内存垃圾回收的评论 (共 条)

分享到微博请遵守国家法律