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下一种简单易行的cpu benchmark方法

    用Linux自带的bc计算器计算pi值的一种benchmark手段   其实很简单,就是一行命令. time echo “scale=5000; 4*a(1)” | bc -l -q time是计时程 ...

  2. SDOI2018 一轮培训划水祭

    \(\mathcal{Day \ \ -3}\) 作为前言来讲,我对于过几天的省选培训还是很期待的--就算我的实力根本不够,名额是学校推荐的,但是能见到\(\mathcal{cwbc}\)以及一众大佬 ...

  3. Gradle Goodness: Display Available Tasks

    To see which tasks are available for our build we can run Gradle with the command-line option -t or ...

  4. centos6.4安装使用wine 持续更新中

    首先,从wine的官网下载页面http://www.winehq.org/download/可以了解到centos安装wine需要EPEL软件仓库.那么首先安装EPEL软件仓库,从http://mir ...

  5. activemq的高级特性:通配符式分层订阅

    activemq的高级特性之通配符式分层订阅 队列的名称可以分层:aa.bb.cc.dd 可以匹配:aa.bb.cc.dd,aa.*.cc.dd,aa.> *:匹配当前层的内容 >:任何一 ...

  6. 在node中使用jwt签发与验证token

    1.什么是token token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识. token是在服务端产生的.如果前端使用用户名和密码向服务端发送请求认证,服务端认证成功,那 ...

  7. C语言中的if与else if

    今天发现一个比较不理解的代码,是关于else if这个判断语句的代码.代码如下 #include<stdio.h> ; int main(void) { ) { printf(" ...

  8. python+MongoDB使用示例

    本博客起源于博主的大三NoSQL课程设计,采用python+MongoDB结合方式,将数据从txt文件导入MongoDB之中,再将其取出以作图.主要技术是采用python与MongoDB结合存储读取方 ...

  9. django无法加载样式

    如果运行的环境是win10,那么首先应该考虑是否是如下问题 win10中Django后台admin无法加载CSS等样式 解决: 修改win10的注册表:[win+R输入Regedit] 因为你安装的某 ...

  10. # 20155224 实验四 Android程序设计

    20155224 实验四 Android程序设计 任务一 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for And ...