垃圾收集器
垃圾收集(Garbage Collection,GC)。当需要排查各种内存溢出、内存泄露问题时,当垃圾收集成为系统更高并发量的瓶颈时,我们需要去了解GC和内存分配。

检查对象的"存活"状态

  1. 引用计数法:每当有一个地方引用对象时,计数器加1;当引用值失效,减1;任何时刻计数器为0,则表示对象不可能再被使用。缺点就是很难解决对象之间相互循环引用的问题。(如a.instance=b;b.instance=a)
  2. 可达性分析算法:这个算法的思想是通过一系列成为“GC Roots”的对象作为起始点,从这些结点向下搜索,搜索走过的路径成为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明该对象不可用。在Java语言中,可作为GC Roots的对象包括下面几种:
    • 虚拟机栈(栈帧中的本地变量表)中引用的对象;
    • 方法区中静态属性引用的对象;
    • 方法区中常量引用的对象;
    • 本地方法中JNI(即一般说法中的Native方法)引用的对象。
  3. 再谈引用:之前两个方法中对象的存活时都是与“引用”相关。JDK1.2后,Java对引用概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用这四种,四种强度依次逐渐减弱。
    • 强引用是代码中普遍存在的,类似于Object o=new Object()这类引用,只要强引用还在,垃圾收集器就永远不会回收被引用的对象。
    • 软引用是描述一些还有用但非必须的对象,对于软引用关联的对象,在系统将要发生内存溢出异常之前,会把这些对象列入回收范围之中,并进行第二次回收。若是不行才会报内存溢出异常。
    • 弱引用是描述非必需对象的,它的强度比软引用更弱一些,被弱引用的对象只能生存到下一个垃圾收集之前(无论内存是否充足,都会被回收)。
    • 虚引用也被称为幽灵引用或者幻影引用,是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法对虚引用来获取一个对象的实例。为对象设置虚引用关联的唯一目的是能在这个对象能被收集器回收时收到一个系统通知。
  4. 生存还是死亡:在可达性分析中不可达对象也不是"非死不可",这时候它们处于缓刑阶段,要宣告一个对象的死亡,至少要经历两次标记过程。如果对象在进行可达性分析后没有与GC Roots相连的引用链,那它将会被第一次标记并且进行一次筛选,筛选条件是此对象中是否有必要执行finalize()方法。当对象没有覆盖finalize()方法,或finalize()方法已经被虚拟机调用过,虚拟机江浙两种情况都视为"没有必要执行"。如果这个对象被判定有必要执行finalize()方法,那这个对象会被放置在F-Queue的队列之中,稍后由虚拟机自动建立的、低优先级的Finalizer线程去执行(触发这个方法,但不能保证运行完,因为可能会有死循环或者执行速度缓慢)它。finalize()方法是对象摆脱被回收的最后一次机会(只要重新链接上引用链),这时若是没能拯救自己,就会被第二次标记。
  5. 回收方法区:Java虚拟机规范没有要求在方法区进行垃圾收集,而且在方法区回收垃圾效率比较低。永久代的垃圾收集主要分为2部分,废弃常量和无用的类。JDK8移除了了永久代,相对的元空间metaspace会不会有gc来收集垃圾呢?GC默认会在元空间变满时对其进行回收,它还会动态增加(如果允许)分配给元数据内存。由于元空间的动态扩展(这是permgen无法做到的),启用CMSClassUnloadingEnabled,会使得GC在元空间的效率比永久代更好。

JVM:垃圾收集器与对象的"存活"问题的更多相关文章

  1. JVM垃圾收集器与内存分配策略(一)

    在前面的Java自动内存管理机制(上)和Java自动内存管理机制(下)中介绍了关于JVM的一些基础知识,包括运行时数据区域划分和一些简单的参数配置,而其中也谈到了GC,但是没有深入了解,所以这里开始简 ...

  2. 7种JVM垃圾收集器特点,优劣势、及使用场景

    今天继续JVM的垃圾回收器详解,如果说垃圾收集算法是JVM内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 一.常见的垃圾收集器有3类 1.新生代的收集器包括 Serial PraNew Pa ...

  3. 【006】【JVM——垃圾收集器总结】

     Java虚拟机学习总结文件夹 JVM--垃圾收集器总结 垃圾收集器概览 收集算法是内存回收的方法论.垃圾收集据是内存回收的详细实现.Java虚拟机规范中对垃圾收集器应该怎样实现没有规定.不同的厂 ...

  4. 第五章 JVM垃圾收集器(1)

    说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法> 1.七种垃圾收集器 Serial(串行GC)-- 复制 ParNew(并行GC)-- ...

  5. 第六章 JVM垃圾收集器(2)

    上一章记录了几种常见的垃圾收集器,见<第五章 JVM垃圾收集器(1)> 1.G1 说明: 从上图来看,G1与CMS相比,仅在最后的"筛选回收"部分不同(CMS是并发清除 ...

  6. JVM垃圾收集器(1)

    此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法& ...

  7. 5种JVM垃圾收集器特点和8种JVM内存溢出原因

    先来看看5种JVM垃圾收集器特点 一.常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Serial ParNew Parallel Scavenge 老年代收集器: Serial O ...

  8. 7种 JVM 垃圾收集器特点、优劣势及使用场景(多图)

    7种 JVM 垃圾收集器特点.优劣势及使用场景(多图)  mp.weixin.qq.com 点击上方"IT牧场",选择"设为星标"技术干货每日送达! 一.常见垃 ...

  9. JVM垃圾收集器-Parallel Scavenge收集器

    今天我给大家讲讲JVM垃圾收集器-Parallel Scavenge收集器 Parallel Scavenge收集器 Parallel Scavenge收集器也是一个新生代收集器,它也是使用复制算法的 ...

随机推荐

  1. Redis——set,hash与列表

    一.List列表 基于Linked List实现 元素是字符串类型 列表头尾增删快,中间增删慢,增删元素是常态 元素可以重复出现 最多包含2^32-1元素 列表的索引 从左至右,从0开始 从右至左,从 ...

  2. JetBrains 系列软件汉化包 2017.3-2018.1

    JetBrains 系列软件汉化包 关键字: Android Studio 3.0-3.1.3 汉化包 CLion 2018.1-2018.2 汉化包 GoLand 2017.3.2-2018.2 汉 ...

  3. CodeForce-811B Vladik and Complicated Book(水题)

    http://codeforces.com/problemset/problem/811/B 题意: 给定一个长度为 N 不重复的数字序列,然后对其进行 M 次询问. 每次询问含L,R,X三个值,问如 ...

  4. 【PHP数据结构】散列表查找

    上篇文章的查找是不是有意犹未尽的感觉呢?因为我们是真真正正地接触到了时间复杂度的优化.从线性查找的 O(n) 直接优化到了折半查找的 O(logN) ,绝对是一个质的飞跃.但是,我们的折半查找最核心的 ...

  5. PHP的Mhash扩展函数的学习

    这次我们要学习的又是一个 Hash 加密扩展.不过这个扩展 Mhash 已经集成在了 Hash 扩展中.同时也需要注意的是,这个扩展已经不推荐使用了,我们应该直接使用 Hash 扩展中的函数来进行 H ...

  6. php curl下载文件由于空格导致下载文件失败

    <?php //$result=httpcopy('http://www.phpernote.com/image/logo.gif'); echo '<pre>';print_r($ ...

  7. git tag标签

    列出标签 # 默认按字母排序显示 $ git tag # 模糊匹配查找标签 $ git tag -l "v2.8.5*" 创建标签 # 创建附注标签 $ git tag -a v1 ...

  8. 鸿蒙内核源码分析(根文件系统) | 先挂到`/`上的文件系统 | 百篇博客分析OpenHarmony源码 | v66.01

    百篇博客系列篇.本篇为: v66.xx 鸿蒙内核源码分析(根文件系统) | 先挂到/上的文件系统 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...

  9. P3293-[SCOI2016]美味【主席树】

    正题 题目链接:https://www.luogu.com.cn/problem/P3293 题目大意 给出一个长度为\(n\)的序列,\(m\)次询问给出\(b,x,l,r\)表示询问在\([l,r ...

  10. P4922-[MtOI2018]崩坏3?非酋之战!【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4922 题目大意 题目好长直接放了 在崩坏 3 中有一个叫做天命基地的地方,女武神们将在基地中开派对与敌人们厮杀. ...