Jvm垃圾回收(gc)知识总结

Garbage Collection(垃圾回收)

一、回收原则

首先明确一点,java的GC回收是完全自动的,没有提供相关api手动回收,所有的内存分配和回收权限都在jvm,在开发人员手里没有绝对的强制垃圾回收的方法,不过可以这样去做:

  1. 对于不再引用的对象,及时把它的引用赋为null。 obj = null;
  2. 如果内存确实很紧张,调用System.gc() 方法来**建议垃圾回收器开始回收垃圾,通知GC运行,**但是Java语言规范并不保证GC一定会执行。
  3. 垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。

1.1 垃圾收集器收集的标准(内存空间)

  1. 给对象赋予了空值null,以下再没有调用过
  2. 给对象赋予了新值
  3. 给对象重新分配了内存地址

1.2 关于四种引用类型

JDK1.2 之前,一个对象只有“已被引用”和"未被引用"两种状态,这将无法描述某些特殊情况下的对象,比如,当内存充足时需要保留,而内存紧张时才需要被抛弃的一类对象。

所以在 JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4 种,这 4 种引用的强度依次减弱。

**1、强引用:**一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。只要强引用存在就永远不会被回收,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError。只有它的引用赋为null。 obj = null;才可能会被回收

**2、软引用:**用SoftReference类实现,**一般不会轻易回收,只有内存不够才会回收。**这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等。

**3、弱引用:**用WeekReference类实现,一旦垃圾回收已启动,就会回收。

4、虚引用:**不能单独存在,**那么它就和没有任何引用一样,用 PhantomReference 类来表示,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态。在任何时候都可能被垃圾回收器回收。

二、优先级

垃圾回收在jvm中优先级相当相当

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值