哪些对象可以回收,有两种算法:

1. 引用计数算法,对象被引用计数器加1,对象被释放计数器减1。计数器为0的对象是可以被回收的。

  此种方法优点:简单。缺点:会存在互相引用的两个对象,但实际这两个对象都没有用了。但各自计数器不为0,永远不能被回收。

2. 可达性分析算法,从一系列GC Roots作为起点,开始往下搜索,搜索经过的路径叫做引用链,没有在链上的对象是可以被回收的。这样,即使有互相引用的对象,但没有在引用链上,也会被回收。

  GC Roots 包括:

    (1)虚拟机栈中引用的对象。

    (2)方法区中类静态属性引用的对象。

    (3)方法区中常量引用的对象。

    (4)Native方法中引用的对象。

引用分4个等级:

  (1)强引用,类似与 Object o = new Object()这类引用。这类被引用的对象永远不会被回收。

  (2)软引用,有用但是非必须的对象。在内存溢出前,这类对象将被列进回收范围等待二次回收。如果第二次回收后,还是没有足够内存,则内存溢出。

  (3)弱引用,非必须的对象,弱引用关联的对象可生存在下一次回收之前。下次回收不管内存是否够都会被回收。

  (4)虚引用,此引用存在的唯一目的是,能收到回收的系统消息。随时被回收。

finalize()方法,系统GC是会别调用,重写该方法可以实现即将被回收对象的自我救赎,即可逃过第一次回收。但第二回收时,finalize ()方法不会被调用。

垃圾回收算法:

1. 标记-清除算法,两个阶段,首先对需要被回收的对象进行标记,再对被标记过的对象进行清除。

  最原始的垃圾回收算法。

2. 复制算法,将内存分为两个区,将不能回收的对象复制到另外一个区,在将原来的区整个清除。两个去交替进行。

  优点:速度快。缺点:需要两倍的存储空间。

  适合young edge回收。

3. 标记-整理算法,将需要被回收的对象进行标记,然后对不需要的对象进行规整,充分利用碎片空间。

  适合old edge回收。

4. 分代手机算法,青年代中用复制算法,老年代用标记-清理或是标记-整理算法。

  

JAVA-JVM垃圾回收算法的更多相关文章

  1. JVM垃圾回收算法(最全)

    JVM垃圾回收算法(最全) 下面是JVM虚拟机运行时的内存模型: 1.方法区 Perm(永久代.非堆) 2.虚拟机栈 3.本地方法栈 (Native方法) 4.堆 5.程序计数器 1 首先的问题是:j ...

  2. JVM垃圾回收算法及回收器详解

    引言 本文主要讲述JVM中几种常见的垃圾回收算法和相关的垃圾回收器,以及常见的和GC相关的性能调优参数. GC Roots 我们先来了解一下在Java中是如何判断一个对象的生死的,有些语言比如Pyth ...

  3. JVM 垃圾回收算法和垃圾回收器

    JVM 垃圾回收算法和垃圾回收器. 一.垃圾回收的区域 栈:栈中的生命周期是跟随线程,所以一般不需要关注. 堆:堆中的对象是垃圾回收的重点. 方法区:这一块也会发生垃圾回收,不过这块的效率比较低,一般 ...

  4. JVM垃圾回收算法解析

    JVM垃圾回收算法解析 标记-清除算法 该算法为最基础的算法.它分为标记和清除两个阶段,首先标记出需要回收的对象,在标记结束后,统一回收.该算法存在两个问题:一是效率问题,标记和清除过程效率都不太高, ...

  5. Java基础:JVM垃圾回收算法

    众所周知,Java的垃圾回收是不需要程序员去手动操控的,而是由JVM去完成.本文介绍JVM进行垃圾回收的各种算法. 1. 如何确定某个对象是垃圾 1.1. 引用计数法 1.2. 可达性分析 2. 典型 ...

  6. 【转】Java学习---垃圾回收算法与 JVM 垃圾回收器综述

    [原文]https://www.toutiao.com/i6593931841462338062/ 垃圾回收算法与 JVM 垃圾回收器综述 我们常说的垃圾回收算法可以分为两部分:对象的查找算法与真正的 ...

  7. java架构之路-(12)JVM垃圾回收算法和垃圾回收器

    接上次JVM虚拟机堆内存模型来继续说,上次我们主要说了什么时候可能把对象直接放在老年代,还有我们的可能性分析,提出GCroot根的概念.这次我们主要来说说垃圾回收所使用的的算法和我们的垃圾回收器,需要 ...

  8. 了解java虚拟机—垃圾回收算法(5)

    引用计数器法(Reference Counting) 引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器减1.只要对象A的引用计数器的 ...

  9. JVM 垃圾回收算法及案例分析

    一. 在说垃圾回收算法之前,先谈谈JVM怎样确定哪些对象是“垃圾”. 1.引用计数器算法: 引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器- ...

  10. 第四章 JVM垃圾回收算法

    说明:在阅读本篇之前,需要知道怎么判断对象的存活与否,见<第三章 JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程> 注意:本文主要参考自<分布式Java应用:基础与实践& ...

随机推荐

  1. java面向对象基础回顾

    (49)  (0) 面向对象 啥是面向对象 什么是多态多态的机制 接口和抽象类区别 个人理解 代码实现 面向对象 学习java大家接触到的最多的话语无非就是面向对象,可能大家没有仔细研究过这个问题,但 ...

  2. Spring的事物传播行为

    事物的传播属性:当事务方法被另一个事务方法调用时, 必须指定事务应该如何传播. 例如: 方法可能继续在现有事务中运行(REQUIRED), 也可能开启一个新事务, 并在自己的事务中运行(Require ...

  3. Hibernate的映射组成关系

    建立域模型(Java的对象模型)和关系数据模型(数据库表模型)有着不同的出发点: 域模型: 由程序代码组成, 通过细化持久化类的的粒度(就是通过把相同的属性,规划为一个类)可提高代码的可重用性, 简化 ...

  4. HDU 5876 大连网络赛 Sparse Graph

    Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) T ...

  5. Tomcat----->软件密码学基础配置tomcat http连接器 https

    公钥只能私钥解开,私钥只能公钥解开. 类似于别人给你一个盒子,你用他的盒子和自己盒子加密,他手中有他的钥匙和自己的钥匙,可以解开就既能证明是你发的也能相信内容. 每个数据有自己的数据指纹,数据指纹是由 ...

  6. Writing a Discard Server 写个抛弃服务器 世上最简单的协议

    Netty.docs: User guide for 4.x https://netty.io/wiki/user-guide-for-4.x.html The most simplistic pro ...

  7. linux UIO

    UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍(由www.169it.com搜集整理) UIO(Userspace I/O)是运行在用户空间的I/O技术.Linu ...

  8. js当前页面刷新并且清空文本内容的方法

    js当前页面刷新并且清空文本内容的方法: 1.js代码:location.reload(); 2.html:<body onload="document.forms[0].reset( ...

  9. HTML 之轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Bad Hair Day---poj3250(栈的运用)

    题目链接:http://poj.org/problem?id=3250 题意: n个牛排成一列向右看,牛i能看到牛j的头顶,当且仅当牛j在牛i的右边并且牛i与牛j之间的所有牛均比牛i矮. 设牛i能看到 ...