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. Mybatis Plus启动注入 SQL 原理分析

    1) 问题: xxxMapper 继承了 BaseMapper<T>, BaseMapper 中提供了通用的 CRUD 方法, 方法来源于 BaseMapper, 有方法就必须有 SQL, ...

  2. translate动画实例

    <!doctype html> <html lang="en"> <head> <meta name="viewport&quo ...

  3. 多线程简单案例 - join( ) -lock()

    join() 在调用结束前,主线程不会结束 不加的话,主线程会在子线程结束前继续执行:加了join(),主线程会等待子线程结束后在继续执行下去 #python3 #main print number ...

  4. VS2012打开Web项目提示《ASP.NET 4.X 尚未在Web服务器上注册。你需要手动将...》解决方案

    用VS12创建的WEB项目时,默认使用IIS Experess开发服务器,但是每次打开会提示如下提示 但是同一个项目用VS13或VS15打开时,就能正常打开,不会出现以上提示信息. 怀疑是IIS Ex ...

  5. Eclipse设置working set管理项目

    由于项目太多,看起来复杂,不容易找到,所以想要按文件夹区分,所以用到workingset. working set是把你这个存储空间的项目在eclipse中进行分类,只是在视图基础上分类,项目还是只有 ...

  6. 位图索引对于DML操作的影响

    位图索引相对于常规的B-tree 索引,有着体积更加小的优势,节省空间.对于重复率特别高的字段,比如性别,比如省份.查询效率要优于B-tree 索引.那为什么我们总被告知在业务库中不要使用呢? 业务库 ...

  7. ORACLE逐行累计求和方法(OVER函数)

    1.RANK ( ) OVER ( [QUERY_PARTITION_CLAUSE] ORDER_BY_CLAUSE ) DENSE_RANK ( ) OVER ( [QUERY_PARTITION_ ...

  8. 通达信k线颜色设置

    通达信的k线函数没有颜色选项.如果想要画颜色可以使用STICKLINE函数来覆盖当前k线这样也是可以满足需求. 第一步画针 STICKLINE(条件 , L , H , 0 , 0 ) , 颜色; 第 ...

  9. VirtualBox + CentOS详细安装教程

    一.前期工作准备 电脑虚拟化开启(必要工作)大致流程: a.电脑开机时长按F12(F10)进入BIOS界面; b.依次选择Configuratio > Intel Virtual Technol ...

  10. HTML5纯Web前端也能开发直播,不用开发服务器(使用face2face)

    前段时间转载了某位大神的一篇文章,开发Web版一对一远程直播教室只需30分钟 - 使用face2face网络教室.非常有意思.看起来非常简单,但作为一名前端开发人员来说,还是有难度.因为要开发服务器端 ...