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. PAT——1035. 插入与归并

    根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...

  2. Linux下gdb调试(tui)

    1 处于TUI模式的GDB 为了以TUI模式运行GDB,可以在调用GDB时在命令行上指定-tui选项,或者处于非TUI模式时在GDB中使用Ctrl+X+A组合键.如果当前处于TUI模式,后一种命令方式 ...

  3. emmet完整收录(html,css)

    emmet官网 https://emmet.io/ 语法篇 Child: > nav>ul>li <nav> <ul> <li></li&g ...

  4. SpringBoot两种读取配置文件的方式

    方式一 @Value("${custom.group}") private String customGroup; 方式二 @Autowired private Environme ...

  5. Java中的集合框架-Collection(二)

    上一篇<Java中的集合框架-Collection(一)>把Java集合框架中的Collection与List及其常用实现类的功能大致记录了一下,本篇接着记录Collection的另一个子 ...

  6. LVS负载均衡机制之LVS-DR模式工作原理以及简单配置

    本博文主要简单介绍一下LVS负载均衡集群的一个基本负载均衡机制:LVS-DR:如有汇总不当之处,请各位在评论中多多指出. LVS-DR原理: LVS的英文全称是Linux Virtual Server ...

  7. 基于 HTML5 Canvas 的拓扑组件开发

    在现在前端圈大行其道的 React 和 Vue 中,可复用的组件可能是他们大受欢迎的原因之一, 在 HT 的产品中也有组件的概念,不过在 HT 中组件的开发是依托于 HTML5 Canvas 的技术去 ...

  8. [上架] iOS 上架更新版本号建议

    iOS 上架一個新版本号,就改个版号数字就好,有什么好说的? 是啊~ 如果上架顺利的话,就没什么好说的,如果被退件,再上传更新时,那版号怎么改? 下面说说我的做法(这只是建议,版号随自己喜好,没有固定 ...

  9. T+固定资产二维码管理(生成,打印)

    先 来几句生硬的开场白. 不知不觉中,二维码慢慢的取代了传统的条码.原因之一就是二维码更加的时尚,原因之二便是二维码可以存储更多的信息.......... 企业的固定资产,直接贴个二维码,然后用手机扫 ...

  10. express添加权限拦截

    express通过中间件的方式添加权限拦截 示例代码如下 app.get('/logout', checkLogin); app.get('/logout', function(req, res) { ...