GC Roots的对象,以及对java类中的成员变量,局部变量,静态变量和常量的不同回收时机的解析

1.作为GC Roots的对象有以下几种

  1. 虚拟机栈(栈帧中的局部变量区,也叫局部变量表)中引用的对象。
  2. 方法区中的类静态属性引用的对象。
  3. 方法区中常量引用的对象。
  4. 本地方法栈中JNI(Native)方法引用的对象。

2.成员变量(实例变量)&局部变量&静态变量(类变量)的区别

成员变量(实例变量)&局部变量区别:

  1. 作用域
  • 成员变量:针对整个类有效。
  • 局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)
  1. 存储位置
  • 成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
  • 局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中(栈帧中的局部变量表)。
    当方法调用完,或者语句结束后,就自动释放。
  1. 初始值
  • 成员变量:有默认初始值。
    注意:赋值的时候不能把声明和赋值分开
    举例:
public class demo{
    int x ;
    x = 1;  //这样不行
}
public class demo{
    int x = 10;  //这样就可以
}

原因是 :成员变量在类的范围内,存在于堆内存中,会有默认的初始值,在声明的同时已经给变量赋值了。再次”赋值“实际是使用了语句,而类体里面只能出现变量和方法,不能出现语句。

  • 局部变量:没有默认初始值,使用前必须赋值。

成员变量(实例变量)&静态变量(类变量)区别:

  1. 调用方式
    静态变量也称为类变量,可以直接通过类名调用。也可以通过对象名调用。
    这个变量属于类。
    成员变量也称为实例变量,只能通过对象名调用。这个变量属于对象。
  2. 存储位置
    静态变量存储在方法区中。
    成员变量存储在堆内存。
  3. 生命周期
    静态变量随着类的加载而存在,随着类的消失而消失。生命周期长。
    成员变量随着对象的创建而存在,随着对象的消失而消失。
  4. 与对象的相关性
    静态变量是所有对象共享的数据。
    成员变量是每个对象所特有的数据。

关于静态变量和常量的详细解析:

参照:从class文件与JVM加载机制理解final、static、static final

不同的回收机制总结

  1. 变量属于类变量(静态变量),那么永远不会被回收,原因是方法区中的类静态属性引用的对象是GC Roots,不会被回收。
  2. 变量属于实例(成员变量,包括final),则实例被回收才会被顺便回收(和实例一起存在堆中,栈帧中的局部变量区(GC Root)中不再引用,就回收)
  3. 变量属于实例的方法(局部变量),那么他是在栈中临时的(栈帧中的局部变量区(GC Root),GC的区域在堆和方法区,而不在栈),随着方法结束了,栈自动释放了,无需回收。
全部评论

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务