JVM思路
2021-07-12 19:51:03   4  举报             
     
         
 AI智能生成
  JVM知识体系
    作者其他创作
 大纲/内容
  系统学习思路    
     运行时数据区    
     程序计数器  
     虚拟机栈  
     本地方法栈  
     方法区    
     常量池    
     字面量 Literal 类似final的常量 String  
     符号引用    
     类和接口的全限定名  
     字段的名称和描述符  
     方法的名称和描述符  
     堆  
     堆    
     分代    
     新生代    
     8:1:1 为什么?    
     98%能回收  
     不能98%回收    
     分配担保  
     老年代  
     永久代\Meta Space 1.8  
     各个分代大小多少合适  
     新生代晋升老年代    
     对象优先分配在Eden    
     -XX:SurvivorRatio=8  
     -Xms20M  
     -Xmx  
     -Xmn  
     -XX:+PrintGCDetails  
     对象分配TLAB    
     栈上分配  
     逃逸分析  
     指针碰撞    
     cas同步  
     空闲列表  
     大对象直接进入老年代    
     -XX:PretenureSizeThreshold=3145728=3M  
     长期存活的对象将进入老年代    
     age  
     -XX:MaxTenuringThreshold=1  
     动态对象年龄判定    
     相同年龄所有对象的大小总和 > Survivor空间的一半    
     直接晋级 不需要判定 MaxTenuringThreshold  
     空间分配担保    
     Minor GC 之前检查 老年代最大可用连续空间是否>新生代所有对象总空间    
     大于    
     Minor GC  
     不大于    
     老年代最大可用连续空间是否大于历次晋升到老年代对象的平均大小    
     大于    
     Minor GC  
     不大于    
     Full GC  
     -XX:-HandlePromotionFailure (1.6Update 24之后不生效)    
     允许担保失败    
     大于    
     Minor GC  
     不大于    
     Full GC  
     不允许担保失败    
     Full GC  
     垃圾回收    
     什么样的对象需要被回收
    
     判断算法    
     引用计数法  
     可达性分析算法    
     GC Roots    
     虚拟机栈中本地变量表引用的对象  
     方法区中    
     类静态变量引用的对象  
     常量引用的对象  
     本地方法栈中JNI引用的对象   
     不可达了还会发生什么    
     finalize()  
     引用-定义回收优先级    
     强引用  
     软引用    
     内存不足时回收
    
     缓存  
     弱引用    
     下一次垃圾收集会回收掉,不管内存是否足够    
     大对象  
     虚引用  
     回收    
     垃圾回收算法-方法论    
     标记-清除算法    
     pros    
     first  
     cons    
     效率不高  
     空间碎片  
     复制算法    
     pros    
     实现简单、高效、不用考虑碎片  
     cons    
     要分一块出来做复制倒  
     标记-整理算法   
     垃圾回收器-hotspot实现    
     Serial    
     历史悠久  
     单线程  
     client  
     ParNew    
     多线程    
     多核下对资源的利用率会高  
     -XX:+ UseConcMarkSweepGC 的默认新生代收集器  
     -XX:ParallelGCThreads    
     GC线程数  
     Parallel Scavenge    
     吞吐量    
     吞吐量 = 运行用户代码时间 / (运行用户代码时间  + 垃圾收集时间)  
     -XX:MaxGCPauseMillis    
     垃圾回收时间尽量不超过  
     -XX:GCTimeRatio    
     垃圾收集时间占总时间的比率  
     -XX:UseAdaptiveSizePolicy    
     自动设置 动态调整  
     GC  Ergonomics  
     Serial Old    
     client  
     server    
     与Paralle Scavenge  
     CMS的后备预案    
     Concurrent Mode Failusre时使用  
     Parallel Old    
     标记-整理算法  
     CMS Concurrent Mark Sweep    
     标记-清除算法  
     减少回收停顿时间  
     步骤    
     初始标记    
     快  
     标记GC Roots能直接关联的对象  
     并发标记    
     GC Roots Tracing  
     重新标记    
     修正并发标记期间用户程序继续运行产生变动的那一部分对象的标记记录  
     比初始标记时间长  
     比并发标记时间短  
     并发清除    
     清除而不是整理 意味着有碎片  
     缺点 cons    
     CPU敏感    
     GC线程占用CPU资源导致 吞吐量下降  
     无法处理浮动垃圾    
     垃圾收集阶段用户程序还要运行所以还要预留空间 不能被填满再回收    
     -XX:CMSInitiationgOccupancyFraction    
      Concurrent Mode Failure 启用Serial Old  
     碎片    
     -XX:+UseCMSCompactAtFullCollection    
     FullGC时开启内存碎片的合并整理过程  
     -XX:CMSFullGCsBeforeCompaction    
     执行多少次不压缩FullGC后 来一次带压缩的 0 表示每次都压  
     -XX:+UseConcMarkSweep  
     +XX:+ScavengeBeforeRemark 触发Minor GC  
     http://incdn1.b0.upaiyun.com/2014/11/fcc8b26b654194d19118c91c0a73f432.jpg  
     G1    
     G1垃圾回收器适用于堆内存很大的情况,他将堆内存分割成不同的区域,并且并发的对其进行垃圾回收。  
     G1也可以在回收内存之后对剩余的堆内存空间进行压缩。  
     并发扫描标记垃圾回收器在STW情况下压缩内存。  
     G1垃圾回收会优先选择第一块垃圾最多的区域   
     通过JVM参数 –XX:+UseG1GC 使用G1垃圾回收器  
     http://ifeve.com/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3g1%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8/  
     组合
  
     什么时间节点回收    
     GC Roots枚举效率    
     OopMap  Ordinary Object Pointer  
     安全点    
     方法调用  
     循环跳转  
     异常跳转  
     抢先式中断    
     先暂停 没在安全点的继续跑  
     主动式中断    
     设置GC 标志    
     看到标志就停  
     安全域    
     线程挂起怎么办  
     一段代码中,引用关系不会发生变化    
     1.标识线程自己进入了safe regin  
     2.离开时检查系统是否已经完成GC过程  
     -XX:+PrintGCApplicationStoppedTime  
     www.gupaoedu.com  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 