三个问题:

那些内存需要回收? -- 对象是否存活判断

什么时候回收?   --垃圾回收触发条件

如何回收? --垃圾回收算法

垃圾回收应用  -- 理解GC日志、使用垃圾回收命令和工具

1.  判断对象是否存活

  •   引用计数法
  •   可达性分析算法

  引用计数法:给对象增添一个计数器,每当被引用一次,计数器数值+1;引用失效则-1;当计数器为0时,该对象不再被使用。

  优点:实现简单,判定效率高。

  缺点:不能解决对象之间相互循环引用问题。

  VM参数配置 -Xms100m -Xmx100m  -XX:+PrintGCDetails(打印GC日志)

public class LeetCode {
public Object instance = null;
public static void main(String[] args){
testGC(); } public static void testGC(){
LeetCode leetCode1 = new LeetCode();
LeetCode leetCode2 = new LeetCode(); leetCode1.instance = leetCode2;
leetCode2.instance = leetCode1; leetCode1 = null;
leetCode2 = null; System.gc(); } }

  GC日志:

    这两个互相引用的对象被回收了,说明采用的不是引用计数法

  可达性分析算法: 
    
GCRoots:

  •       虚拟机栈中引用的对象
  •       方法区中类静态属性引用的对象
  •       方法区中常量引用的对象
  •       本地方法栈中JNI(即一般说的Native方法)引用的对象

  判断对象的引用链是否能够到达GC Roots,能到达则为存活,不能则是已经死亡

2. 回收步骤、

  2.1 是否可达

  2.2 标记,然后筛选 是否有必要执行finalize()方法

  2.3 有必要的话,放置到F-Queue队列,由虚拟机自动建立一个低优先级的Finalizer线程去执行每个对象的finalize();

2.4 GC回对F-queue的对象进行二次标记,finalize是对象逃脱死亡的最后一次机会。

3.回收算法

  3.1 标记-清除算法

3.2 复制算法-被商业虚拟机广泛采用收集新生代的算法

    将内存分为两块,每次只用其中一块,当这块内存用完了,将仍然存活的对象复制到另外一块上面,然后把已使用的内存空间一次清理。

    实现简单,运行高效,但是会浪费一部分内存空间

    记住一个比例  8:1:1    Eden:From Survivor: To Survivor

  3.3 标记整理算法

  3.4 分代收集算法 (新生代:复制算法 老年代:标记-清理算法)

    并没有创新的算法,而是在合适的区域采用合适的回收算法。

JVM(二):垃圾回收的更多相关文章

  1. JVM总括二-垃圾回收:GC Roots、回收算法、回收器

    JVM总括二-垃圾回收:GC Roots.回收算法.回收器 目录:JVM总括:目录 一.判断对象是否存活 为了判断对象是否存活引入GC Roots,如果一个对象与GC Roots没有直接或间接的引用关 ...

  2. jvm的垃圾回收算法

    一.对象存活判断判断对象是否存活一般有两种方式:1.引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收.此方法简单,无法解决对象相互循环引用的问题.2 ...

  3. JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

     相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术 ...

  4. 扒一扒JVM的垃圾回收机制,下次面试你准备好了吗

      相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技 ...

  5. JVM的垃圾回收机制

    JVM的垃圾回收机制:(GC通过确定对象是否被活动对象引用来确定是否收集该对象.) 1.触发GC(Garbage Collector)的条件. (1.GC在优先级最低的线程中运行,在未运行的线程中进行 ...

  6. 2.1.JVM的垃圾回收机制,判断对象是否死亡

    因为热爱,所以坚持. 文章下方有本文参考电子书和视频的下载地址哦~ 这节我们主要讲垃圾收集的一些基本概念,先了解垃圾收集是什么.然后触发条件是什么.最后虚拟机如何判断对象是否死亡. 一.前言   我们 ...

  7. JVM中垃圾回收机制如何判断是否死亡?详解引用计数法和可达性分析 !

    因为热爱,所以坚持. 文章下方有本文参考电子书和视频的下载地址哦~ 这节我们主要讲垃圾收集的一些基本概念,先了解垃圾收集是什么.然后触发条件是什么.最后虚拟机如何判断对象是否死亡. 一.前言   我们 ...

  8. JVM虚拟机垃圾回收(GC)算法及优缺点

    一.什么是GC   GC是jvm的垃圾回收,垃圾回收的规律和原则为:   次数上频繁收集新生区(Young)   次数上较少收集养老区(Old)   基本上不动永久区(Perm) 二.GC算法(分代收 ...

  9. JVM学习——垃圾回收GC(学习过程)

    JVM学习-垃圾回收(GC) 2020年02月19日06:03:56,开始学习垃圾回收,学习资料来源(张龙老师的JVM课程) JVM内存数据区域知识复习 学习垃圾回收之前,要对JVM内部的内存区域有详 ...

  10. JVM的垃圾回收机制详解和调优

    JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...

随机推荐

  1. 07_ddms透视图介绍

    通过ADB(Android Debug Bridge)安卓调试桥把你的Eclipse(集成开发环境)和你的设备连接在一起.有时候ADB可能会被其他的东西占用.例如WPS会跟你抢ADB(抢端口).如果你 ...

  2. python笔记——均值、方差、中位数计算

    from __future__ import print_function # 均值计算 data = [3.53, 3.47, 3.51, 3.72, 3.43] average = float(s ...

  3. Ubuntu的apt-get本地源搭配——根据需要自己添加软件作源

    试验机器:   Ubuntu 12.04.Lubuntu都可,其他版本应该也没问题,服务器ip:192.168.235.133     主机执行步骤:   1.在/var/cache/apt/arch ...

  4. CocoaPods常用操作命令

    查看镜像: gem sources -l 删除镜像 gem sources --remove https://rubygems.org/ 添加镜像 gem sources -a https://gem ...

  5. 基于FormsAuthentication的用户、角色身份认证(转)

    一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否 ...

  6. PAT1060【大模拟啊】

    怎么麻烦怎么来了??? 提供几个案例: 5 0.00001 0.00001 0 0.0 0.0222 1 0.001 0.2000 2 005.06 0.230 1 00.020 0 贴份代码跑.. ...

  7. Codeforces Beta Round #71 C【KMP+DP】

    Codeforces79C 题意: 求s串的最大子串不包含任意b串: 思路: dp[i]为以i为起点的子串的最长延长距离. 我们可以想到一种情况就是这个 i 是某个子串的起点,子串的长度-1就是最短, ...

  8. Mybatis中文模糊查询,数据库中有数据,但无结果匹配

    1.Mybatis中文模糊查询,数据库中有数据,但无结果匹配 1.1 问题描述: Mybatis采用中文关键字进行模糊查询,sql语句配置无误,数据库有该数据,且无任何报错信息,但无查询结果 1.2 ...

  9. 51nod 1781 Pinball(线段树)

    题面 Pinball的游戏界面由m+2行.n列组成.第一行在顶端.一个球会从第一行的某一列出发,开始垂直下落,界面上有一些漏斗,一共有m个漏斗分别放在第2~m+1行,第i个漏斗的作用是把经过第i+1行 ...

  10. Mol Cell Proteomics. |赵赟| 全面地分析个人尿蛋白质组学的变化揭示出不同的性别变化

    大家好,本周分享的是发表在Molecular & Cellular Proteomics上的一篇关于人的尿蛋白质组学的文章,题目是Comprehensive analysis of indiv ...