作者:zpy7005434 | 来源:互联网 | 2023-09-16 07:34
首先明确对象(引用)类型:1软引用SoftReference有些用,但是并非必需,用软引用关联的对象,系统将要发生OOM(outofmemory)之前,这些对象就会被回收
首先明确对象(引用)类型:
1 软引用 SoftReference有些用,但是并非必需,用软引用关联的对象,系统将要发生OOM(out of memory)之前,这些对象就会被回收jvm 参数设置。2 弱引用3 虚引用 PhantomReference最弱,被垃圾回收的时候会收到一个通知。
4 强引用new创建jvm 参数设置。软引用、弱引用在jdk1.2才有。一般使用强引用,内存不够情况例外。软引用(SoftReference)和弱引用 (WeakReference),有时候做缓存使用。
如何判断对象是否可以被回收jvm 参数设置?
方法一、引用计数法
顾名思义,计算对象被引用的次数jvm 参数设置。但是引用计数法已经落后了,可达性分析能够解决互相引用的问题(两种方法都是基于强引用)。
方法二、可达性分析
可达性指GC Root能否找到某一对象,如果不能该对象可大致(不绝对,后面会讲)认为能够被回收jvm 参数设置。
以下对象可以作为GC Root:
注意,不需要死记硬背jvm 参数设置。可以这么思考:Java中变量总共四类——局部变量、静态变量 、常量、成员变量。方法区中常量引用的对象即局部变量;而虚拟机栈和本地方法栈是线程运行时创建的,里面引用的对象需要被使用,不能被回收。
不可达一定会被回收吗?对象不可达(第一次标记),而且没有在方法finalize()重新建立引用链条(第二次标记)的情况下,将会被回收jvm 参数设置。使用super.finalize()可以将某一对象挽回。