GCRoots: 
 
    虚拟机栈(栈帧中的局部变量表)引用的对象
 
    方法区中静态属性引用的对象
 
    方法去中常量引用的对象
 
    本地方法栈中JNI(NATIVE方法)引用的对象
 
引用: reference类型数据中存储着另外一块地址的起始地址
 
    强引用:通常的引用,只要引用存在便不会被回收
 
    软引用:有用但非必需的对象,在内存将要发生内存溢出异常时,会将这些对象列入范围,进行二次回收。
 
    弱引用:非必需对象,只能生存到下次回收之前,无论内存充足与否,都会被回收。
 
    虚引用:对生存无影响,无法通过虚引用获得对象实例,为一个对象设置虚引用关联的目的是在这个对象被回收之前收到一个系统通知。
 
 
标记死亡:
 
    可达性分析筛选对象=》是否有必要执行finallize()方法(有没有覆盖finallize方法,是否已由虚拟机调用)=》等待回收
                                                                  ||
                                                          F-Queue队列(由虚拟机建立,低优先级的Finallize线程执行(出发finallize()方法,不等待完成(防止finallize方法阻塞)))
 
方法区回收:
 
    效率低,回收很少
 
    废弃常量:
 
    无用的类:
 
       该类所有的实例都被回收,java堆中不存在该类的实例。
 
       加载该类的classloader()已经被回收。
 
       该类对应的java.lang.Class对象没有在任何对象中被引用,无法在任何地方通过反射访问该类的方法。
 
引用计数法,可达性分析判定对象存活。
 
回收算法:
 
    标记-清除:标记所有需要回收的对象,然后回收。效率低,空间碎片问题
 
    复制算法:将内存花费为等大小两块儿,每次只使用一块儿,当一块儿用完,将所有还存活的对象复制到另一块儿,然后把使用过的内存空间一次性清理掉。
 
        实现简单,运行高效;空间浪费;对象存活率较高时,效率低;
 
    标记整理(老年代):
    
        标记可回收对象=》所有可存活对象向内存一端移动=》清理边界外的内存。
 
    分代回收:
 
        如年轻代的复制算法,老年代的标记清除,或者标记整理算法。
 
 
HotSpot虚拟机
 
    GC Roots枚举:在安全点通过ooPMap引用表进行枚举,
 
    安全点:方法调用,循环跳转,异常跳转产生安全点=》进入GC
 
    安全区域:处理不执行的程序
 
垃圾收集器:
 
    Serial 
 
        New:Client模式下新生代默认收集器,根据回收内存的大小,简单而高效
 
        Old:主要用在Client模式下老年代收集,
 
    Parallel
 
        Serial的对线程版本。
 
        New:Server模式下新生代默认的收集器,默认搭配老年代CMS收集器,默认开启线程数=CPU个数。
 
        Scavenge:新生代收集器,复制算法,吞吐量优先。-XX:UserAdaptiveSizePolicy 自适应
 
        Old:Scavenge的老年代版本收集器。标记-整理算法
    
    CMS: Concurrent Mark Sweep 并发收集 低停顿,默认线程数 (cpu数 + 3)/4
 
        初始标记=》并发标记=》重新标记=》并发清理
 
        cpu资源敏感(线程数 并发处理过程影响)
        
        无法处理浮动垃圾(并发阶段用户线程产生的垃圾)
 
        标记-清除回收算法产生空间碎片:
 
             +UseCMSCompactAtFullCollection(默认开启)Full GC时 compact
  
             +UseCMSFullGCsBeforeCompact(默认0)执行compact的FullGC间隔。
 
     G1:服务端收集器
 
        并行与并发
 
        分代收集:
 
        空间整合:整体 标记-整理 算法,局部(region)复制算法,避免空间碎片
 
        可预测的停顿:预测时间模型
 
吞吐量:运行用户代码的时间/(运行用户代码时间+垃圾回收时间)
 
 
jvm内存管理:分配内存+回收内存
 
    大对象:需要大量连续空间的java对象(如:字符串,数组)
 
    对象优先在Eden区分配
 
    大对象直接进入老年代 -XX:PretenureSizeThreshod 直接进入老年去的大对象阈值。避免新生代去的大量复制
 
    对象年龄计数器(Age),MinorGC之后进入Survivor区(Age=1),每经一次MinorGC,Age+1,达到-XX:MaxTenuringThreshod后,或者Survivor存活量大于一半,进入老年代。
 

jvm之GC知识点的更多相关文章

  1. 聊一聊 JVM 的 GC

    原文链接:https://www.changxuan.top/?p=1457 引言 JVM 中的 GC 在技术博客中应该算是个老生常谈的话题,网络上也存在着许多质量参差不齐的文章,可以看出来大都是&q ...

  2. JVM的GC概述

    JVM的GC概述 GC即垃圾回收,是指jvm用于释放那些不再使用的对象所占用的内存.在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能. 有些垃圾收集专用于特殊的应用程序.比如,实时应用程序 ...

  3. Linux使用jstat命令查看jvm的GC情况

    Linux使用jstat命令查看jvm的GC情况 http://www.open-open.com/lib/view/open1390916852007.html http://www.aiuxian ...

  4. poptest老李谈jvm的GC

    poptest老李谈jvm的GC   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...

  5. Linux使用jstat命令查看jvm的GC情况(转)

    B. jstack jstack主要用来查看某个Java进程内的线程堆栈信息.语法格式如下: 1 jstack [option] pid 2 jstack [option] executable co ...

  6. jvm的GC日志分析 [转]

      jvm的GC日志分析 标签: jvm内存javagc 2015-06-22 16:37 1566人阅读 评论(1) 收藏 举报  分类: Java(4)  JVM的GC日志的主要参数包括如下几个: ...

  7. JVM 的GC算法和垃圾收集器

    1.标记清除算法 黑色部分代表可回收对象,灰色部分代表存活对象,绿色部分代表未使用的.最基础的收集算法就是标记清除算法如同他名字一样,算法分为"标记"和"清除" ...

  8. JVM&G1 GC 学习笔记(一)

    在入门学习JVM的过程中,我们需要先了解关于JVM的知识中有哪些关键词或关键术语,今天在看完书后我想记录下来. Xms64mb    虚拟机初始化时设置内存大小为64mb Xmx256mb  设定虚拟 ...

  9. 深入理解JVM+G1+GC.pdf (中文版带书签)

    目录 序 VII前言 IX 第1章 JVM & GC基础知识 11.1 引言 21.2 基本术语 31.2.1 Java相关术语 41.2.2 JVM/GC通用术语 241.2.3 G1涉及术 ...

随机推荐

  1. MySQL慢查询日志分析提取【转】

    原文:https://www.cnblogs.com/skymyyang/p/7239010.html 一:查询slow log的状态,如示例代码所示,则slow log已经开启. mysql> ...

  2. 登录SQLServer报错:无法连接到DESKTOP-LDJHQGN

    解决方法:下↓↓↓

  3. LeetCode35.搜索插入位置 JavaScript

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5 输 ...

  4. K3CLOUD开发-动态表单树形单据体实现银行交易对账

    背景:系统手机开单生成销售单据,通过银行pos机收款,系统收款流水与银行流水可能存在差异,所以通过获取银行接口,获取消费信息自动插入到生产系统数据库,开发对账报表,实现差异汇总! 展示效果如下: 开发 ...

  5. js获取今天,明天,本周五,下周五日期的函数

    代码比较简单,随便写写 /** * a连接快速选择日期函数 */ function timeChooseSimple(key, me) { //today,tomorrow,thisWeek,next ...

  6. Tarjan算法初探(2):缩点

    接上一节 Tarjan算法初探(1):Tarjan如何求有向图的强连通分量 Tarjan算法一个非常重要的应用就是 在一张题目性质在点上性质能够合并的普通有向图中将整个强连通分量视作一个点来把整张图变 ...

  7. functional filter()

    #include "pch.h" #include <iostream> #include <deque> #include <string> ...

  8. 大数据学习之Hadoop快速入门

    1.Hadoop生态概况 Hadoop是一个由Apache基金会所开发的分布式系统集成架构,用户可以在不了解分布式底层细节情况下,开发分布式程序,充分利用集群的威力来进行高速运算与存储,具有可靠.高效 ...

  9. python 3下对stm32串口数据做解析

    1.最近有个想做一个传感器数据实时显示的上位机,常规的数据打印太频繁了,无法直观的看出数据的变化. python下的上位机实现起来简单一点,网上找了一些python界面Tkinter相关资料和pyth ...

  10. linux中配置JDK环境变量

    使用的centos版本为 7.5 首先我们要把jdk拷到linux中,这里我们借助XShell工具,我们先来看看Xshell的用法 打开Xshell 后点击文件,“新建“,如下图: 起一个名称,主机填 ...