首先第一个问题,一旦新生代快满了,那么垃圾回收的时候,到底哪些对象是能回收的,哪些对象是不能回收的呢?
这个问题非常好解释,JVM中使用了一种可达性分析算法来判定哪些对象是可以被回收的,哪些对象是不可以被回收的。
这个算法的意思,就是说对每个对象,都分析一下有谁在引用他,然后一层一层往上去判断,看是否有一个GC Roots。
假设现在上图中“ReplicaManager”对象被局部变量给引用了,那么此时一旦新生代快满了,发生垃圾回收,会去分析这个 “ReplicaManager”对象的可达性。
这时,发现他是不能被回收的,因为他被人引用了,而且是被局部变量“replicaManager”引用的。
按照上图思考一下,此时垃圾回收的时候一分析,发现这个“ReplicaManager”对象被Kafka类的一个静态变量 “replicaManager”给引用了。
1、强引用
2、软引用
正常情况下垃圾回收是不会回收软引用对象的,但是如果你进行垃圾回收之后,发现内存空间还是不够存放新的对象,内存都快溢出了,此时就会把这些软引用对象给回收掉,哪怕他被变量引用了,但是因为他是软引用,所以还是要回收。
3、弱引用
这个其实非常好解释,你这个弱引用就跟没引用是类似的,如果发生垃圾回收,就会把这个对象回收掉。
其实这里比较常用的,就是强引用和软引用, 强引用就是代表绝对不能回收的对象,软引用就是说有的对象可有可无,如果内存实在不 够了,可以回收他。
有GC Roots引用的对象不能回收,没有GC Roots引用的对象可以回收,如果有GC Roots引用,但是如果是软引用或者弱引用的,也 有可能被回收掉。
此时会先尝试调用一下他的finalize()方法,看是否把自己这个实例对象给了某个GC Roots变量,比如说代码中就给了ReplicaManager 类的静态变量。
如果重新让某个GC Roots变量引用了自己,那么就不用被垃圾回收了。
不过说实话,这个东西没必要过多解读,因为其实平时很少用,就是给大家梳理出来这些细节,让大家清楚而已。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
1、以后统一用 Young GC指代年轻代gc, 用Old GC指代老年代GC, 用Full GC指 代年轻代、老年代、永久代共同的gc
js中变量什么情况下会是Undefined
技术分享|什么情况下MySQL连查询都能被阻塞?
大类上会分为关系型数据库和非关系型数据库常见关系型数据库
问题原因: 根据系统规范,在Android 11设备上,无法直接访问其它应用内的数据。 (Android 10及以下版本的设备不受影响) 解决方法: 您可以按照以下步骤,使用WPS Office打开其它应用内的文档(以QQ为例): 1) 在该应用内找到所需的文档; 2) 选择 "其它应用打开" ,选择WPS Office; 3) 成功打开文档。
用什么方法获取光盘和镜像
U盘启动U盘要什么格式
系统激活过期对操作有什么影响吗
信创,即信息技术应用创新
Redis ,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis是完全开源免费的,遵守BSD协议。
prtyaa 收益393.62元
zlj141319 收益217.55元
1843880570 收益214.2元
IT-feng 收益208.98元
风晓 收益208.24元
777 收益172.71元
Fhawking 收益106.6元
信创来了 收益105.84元
克里斯蒂亚诺诺 收益91.08元
技术-小陈 收益79.5元
扫一扫关注公众号
扫一扫加入交流群
加入交流群
请使用微信扫一扫!