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. 在 Linux 下搭建 Git 服务器(yum安装)

    服务端(linux): 1. 安装git [root@localhost ~]# yum -y install git 2. 增加一个git账户 为了管理的方便,在linux下面增添一个 " ...

  2. 推荐一个配置linux服务的网站

    该网站的各种linux服务的配置都是基于CentOS系统的 基本上各种linux服务都有了 http://www.server-world.info/en/

  3. vlc源码分析(六) 调用OpenMAX硬解码H.265

    H.265(HEVC)编码格式能够在得到相同编码质量视频的前提下,使用相当于H.264(AVC)一半的存储容量,虽然H.265的算法复杂度比H.264高一个数量级,但是硬件水平在不断提高,因此H.26 ...

  4. LD-sketch源码阅读

    目录 util.h hash.hpp/cpp mangle函数 GenHashSeed函数 AwareHash模块 LDSketch.hpp/cpp LDSketch更新函数,对一个sketch插入键 ...

  5. spring boot++jpa+ mysql +maven

    项目结构图: 一. 添加mysql 配置 1 在pom.xml中添加 maven依赖 <!--mysql--> <dependency> <groupId>mysq ...

  6. 有关dubbo面试的那些事儿

    dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含: 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集 ...

  7. typeof 和 instanceof 区别

    typeof操作符返回一个字符串,表示未经计算的操作数的类型. 可能返回值有:"undefined"."object"."boolean". ...

  8. redefinition of class解决

    垃圾玩意我在这儿翻车了. 编译器:Code::Block(懒得用VS,而且又太大了,CB小,而且也就一个控制台程序) Note to myself: 写完一个class的文件定义,编译,通过之后: 1 ...

  9. Homebrew(brew)安装MySQL成功后无法登录

    Homebrew简称brew,OSX上的软件包管理工具,在Mac终端可以通过brew安装.更新.卸载各种软件,(简直就是神器级武器). 废话不多说,没安装brew自己去百度学习安装,这里就不多说了. ...

  10. leetcode记录-反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假 ...