JVM--对象回收

本文介绍了JVM中的对象回收,主要关注Java堆和方法区。确定对象是否需要回收的方法包括引用计数法和可达性分析法,其中主流JVM采用可达性分析法。介绍了四种引用类型:强引用、软引用、弱引用和虚引用。接着讨论了四种垃圾回收算法:标记-清除、复制、标记-整理和分代收集,以及它们的特点和适用场景。
摘要由CSDN通过智能技术生成

*对之前的一片博客重新整理

1  哪些内存需要回收?

Java运行时数据区包括:程序计数器、虚拟机栈、本地方法栈、Java堆和方法区。这里面程序计数器、虚拟机栈和本地方法栈是线程私有的,当线程结束或者方法退出时其内存自然会被回收。所以Java的垃圾回收机制主要关注的是两部分:Java堆和方法区。JVM规范并没有强制要求对方法区进行GC,其实方法区保存的都是类信息、静态变量、常量等,并不太需要GC,所以GC主要还是关注Java堆。

2  如何确定一个对象需要回收?

判断一个对象是不是需要回收,有两种方法:

2.1  引用计数法

给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加一;当引用失效时,计数器的值减一;任何时刻计数器的值为0的对象就是不可能再被使用的。

引用计数法实现简单,判定效率也很高,在大部分情况下是一个不错的算法。但主流的Java虚拟机都没有使用引用计数法来管理内存,其中主要的原因是:它很难解决对象之间互相引用的问题。比如对象A和B都有instance字段,然后objA.instance=B,objB.instance=A。这里构成了一个循环引用,如果使用引用计数法的话这两个对象永远不会被回收,即使实际上这两个对象都不可能被访问到了。

2.2  可达性分析法

通过一系列的称

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值