关于GC,this的本质和static关键字所需要注意的点

gc相关的算法
1.引用计数算法:在堆中每个对象都有一个引用计数,被引用一次,计数加1,被引用变量值变为null,则计数减1,直到计数为0,则表示变成无用对象,优点是算法简单,缺点是“循环引用的无用对象”无法识别

public class Student {
    String name;
    Student friend;

    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
        s1.friend = s2;
        s2.friend = s1;
        s1 = null;
        s2 = null;
    }
}

s1和s2互相引用,导致引用计数永远不为0 ,但是实际已无用,却没有办法识别。
2.引用可达法(根搜索算法)
程序把所有的引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点被认为是没有被引用的节点,也就是没有用的节点

垃圾的回收过程:
1.新创建的对象,绝大多数都会存储在Eden中
2.当Eden满了(到达一定的比例以后)不能创建对象,则触发垃圾回收(GC),将无用的额对象清理掉,将剩余对象复制到某个Survivor中,如s1,同时清空Eden区
3.当Eden区再次满了,会将s1中的不能清空的对象存到另外一个Survivor中,如s2,同时将Eden中不能清空的对象,也复制到s1中,保证Eden和s1,均被清空
4.重复多次(默认是15次)Survivor中没有被清理的对象,则会复制到老年代Old(Tenured)区中
5.当Old区满了,则会触发一个一次完整的垃圾回收(FullGC),之前新生代的垃圾回收称为(MinorGC)
在这里插入图片描述
对象的创建过程分为以下四步:
1.分配对象空间,并将对象成员变量初始化为0或者空
2.执行属性值的显式初始化
3.执行构造方法
4.返回对象的地址给相关的变量

this的本质就是“创建好的对象的地址”!由于在构造方法调用前,对象已经创建好,因此在构造方法中也可以使用this代表“当前对象”

重点:
1.在对象中可以使用this关键字,因为它从属于对象,而在方法区中则不能使用this关键字,因为它从属于类的相关信息
2.在static修饰的属性或方法中,也不能使用this关键字,也不能使用普通的属性,因为它也在方法区中,方法区中没有对象

在类中,static声明的成员变量为静态成员变量(类变量),它的生命周期和类相同,在整个应用程序执行期间都有效
static修饰的成员变量和方法,从属于类,普通变量和方法从属于对象

public class User {
    int id;
    String name;
    String password;
    static String company = "百度";
    public User(int id,String name ) {
        this.id = id;
        this.name = name;
    }
    public void login() {
        printCompany();
        System.out.println(company);
        System.out.println("登陆"+name);
    }
    public static void printCompany() {
      //  login();
        System.out.println(company);
    }

    public static void main(String[] args) {
        User u = new User(9527,"余小浩");
        User.printCompany();
        User.company = "腾讯";
        User.printCompany();
    }
}

在这里插入图片描述在静态方法中可以使用静态变量,不能使用非静态成员,但是普通的成员和方法是可以去访问静态成员变量和方法的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值