Java 垃圾回收的一些概念

哑火容器
• 阅读 974

Java垃圾回收相关

对象的存活可以通过两种方式确定:

  1. 引用计数法
  2. 可达性分析法

其中可达性分析法中,可以作为GCroot Set中的对象主要包括:

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

引用(腾讯提前批。。。强行问了)

各种引用(强,软,弱,虚)

1.强引用
类似Object obj = new Object();
只要强引用还在,就永远不会被回收。
2.软引用
描述一些有用但并非必需的对象。在将要发生OOM之前,会把这些对象列进回收范围之中进行第二次回收,如果回收还没有足够内存,就抛OOM异常。
JDK1.2后提供了SoftReference来实现软引用。
3.弱引用
弱引用也是描述非必需对象的,但是他的强度比软引用更弱,被弱引用关联的对象只能生存到下一次垃圾回收之前。1.2之后提供了WeakReference。当gc时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。
4.虚引用
最弱的引用关系,1.2之后用PhantomReference来实现,一个对象是否有虚引用,完全不影响其生产时间,也无法通过虚引用来获得一个对象的实例。唯一目的就是在对象被回收时,可以收到一个系统通知。

小结

引用强弱:强>软>弱>虚
关于腾讯提前批,问了强弱引用的区别,直接蒙了。。

垃圾收集算法

四大种
1.标记-清除
2.复制算法
3.标记-整理算法
4.分代收集算法

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java 面试知识点笔记(四)垃圾回收 上篇
问:对象判定为垃圾的标准?没有被其他对象引用问:对象判定为垃圾的算法?引用计数算法通过判断对象的引用数量来判断对象是否可以被回收每个对象实例都有一个引用计数器,被引用则1,完成引用1任何引用计数为0的对象实例可以当垃圾收集的    优点:执行效率高,程序受影响较小    缺点:无法检测出
九路 九路
4年前
4 Java 如何判定是否存活或者死亡
在堆中存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事就是要确定这些对象之中哪些还活着,哪些对象已经死去.判断对象是否已经死亡有以下几种算法:引用计数法算法定义:给对象中添加一个引用计数器,当有一个地方引用时,计数器加1,引用失效时,就减1,当对象的引用计数器为0时,对象就是不可再被使用的.特点:JAVA虚拟机中很少使用这
xiguaapp xiguaapp
4年前
垃圾回收机制
GC标记算法对象被判定为垃圾的标准:没有被其他对象引用引用计数算法:判断对象的引用数量:通过判断对象的引用数量来决定对象是否可以被回收每个对象实例都有一个引用计数器,被引用则1,完成引用则1任何引用计数为0的对象实例可以被当做垃圾收集优点:执行效率高,程序执行受影响较小。
Stella981 Stella981
3年前
GC roots
<divid"cnblogs\_post\_body"class"blogpostbody"<p1.虚拟机栈(本地变量表)引用的对象</p<div2.方法区静态属性引用的对象</div<div3.方法区常量引用的对象</div<div4.本地方法栈JNI(一般指naive方法)中引用的对象</div<div&nbsp;<
Stella981 Stella981
3年前
JVM学习第二天
引用计数算法对象中添加一个引用计数,一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减一两对象互相引用,就会造成死循环,无法回收可达性分析算法通过GCRoots作为起点,向下搜索,到达不了的对象,即证明对象不可用GCRoots包括:虚拟机栈中引用的对象、方法区中类静态属性引用的对象、方法区中常量引用
Stella981 Stella981
3年前
JVM笔记整理
不对之处还望指正。垃圾回收1\.如何判断对象是垃圾对象?引用计数法在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值1,当引用失效时,则值1.此方式不能解决循环引用的问题。验证添加gc日志,\_005GC.javaverbose:gc
Stella981 Stella981
3年前
JVM垃圾回收算法
一、如何判断对象时候需要回收1.引用计数法        给对象添加一个引用计数器,每当有一个地方引用它,计数器加1;引用失效时,计数器减1。计数器为0的对象就表示不可用。      优点:效率高,实现简单。      缺点:对象间如果存在循环引用的情况,就会导致计数器不可能为0,计数器无法通知GC进行回收。2.可达性分析算法
Wesley13 Wesley13
3年前
PHP垃圾回收机制
php5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器1;当变量引用撤掉后,计数器1;当计数器0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。“引用计数”存在问题,就是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经
Stella981 Stella981
3年前
JVM调优总结(三)
可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(ReferenceCounting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记清除(MarkSweep):
Stella981 Stella981
3年前
JVM03
前言今天来学习下与JVM垃圾收集机制相关的一些基本概念。如何判断对象是否存活垃圾收集器首要的任务的任务就是判断哪些对象是存活的,哪些对象已经死去了(这里死去的意思是对象不再被任何途径使用)。引用计数算法引用计数算法是在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器
Stella981 Stella981
3年前
JVM的GC算法总结
Java程序在运行过程中,会产生大量的内存垃圾(一些没有引用指向的内存对象都属于内存垃圾,因为这些对象已经失去标记,程序用不了它们了,对程序而言它们已经废弃),为了确保程序运行时的性能,java虚拟机在程序运行的过程中不断地进行自动的垃圾回收(GC),这就是我们的垃圾回收机制,关于垃圾回收我总结了一下几种:标记–清除算法(MarkSweep)
哑火容器
哑火容器
Lv1
微笑向暖安之若素,你若盛开清风自来。
文章
4
粉丝
0
获赞
0