JVM全家桶 (图文详解均在注释,图片需要时间加载)
2023-06-30 14:57:52   0  举报             
     
         
 AI智能生成
  JVM知识大全,结构清晰明了,知识点解析充分,简约而不简单。
    作者其他创作
 大纲/内容
  类相关    
     类加载过程    
     1、加载  
     2、验证
  
     3、准备
  
     4、解析  
     5、初始化  
     6、使用
  
     7、卸载
  
     类加载器
    
     启动类加载器-Bootstrap ClassLoader
  
     扩展类加载器-Extension ClassLoader
  
     应用程序类加载器-Application ClassLoader
  
     用户自定义类加载器-User ClassLoader
  
     双亲委托机制
    
     好处
    
     确保安全,避免java核心类库被修改
  
     避免重复加载
  
     保证类的唯一性
  
     如何破坏双亲委派机制
    
     重写 loadClass()
  
     不打破双亲委派而重写加载方法
    
     重写findClass()  
     自定义类加载器    
     继承ClassLoader
  
     覆盖loadClass()或者findClass()方法
  
     java内存模型
    
     jvm内存结构
  
     内存区域划分    
     私有区
    
     虚拟机栈
    
     栈布局    
     压栈出栈过程
  
     局部变量表  
     压栈图示  
     栈内存    
     局部变量表
  
     操作数栈
  
     方法返回地址
  
     动态链接
  
     虚拟机栈的特点
  
     本地方法栈  
     程序计数器  
     公有区
    
     堆    
     堆的特点  
     对象在堆中的分配方式
    
     指针碰撞:内存规整时使用  
     空闲列表:内存不规整时使用  
     TLAB:本地线程缓冲区
  
     对象分配过程
  
     Full GC /Major GC 触发条件
  
     四种引用方式
  
     元空间
    
     常量池    
     构成
    
     字面量
  
     符号引用
  
     作用
  
     运行时常量池
    
     符号地址变为真实地址
  
     对象的创建过程  
     本机直接内存
  
     内存回收    
     如何判断对象能否回收?
    
     GC Root
  
     内存分配与回收策略
    
     短期存活、长期存活
  
     大对象直接进入老年代
  
     动态对象年龄判定
  
     老年代空间担保机制
  
     什么情况下对象会进入老年代?
  
     为什么需要分新生代和老年代?
  
     为什么要年轻代要分2个survivor区?
  
     Minor GC vs Major GC/Full GC
  
     触发Full GC的情况
  
     回收算法
    
     复制算法(新生代)
  
     标记-清除算法  
     标记-整理算法(老年代)
    
     优缺点  
     分代收集算法  
     垃圾收集器    
     收集器特点  
     分类    
     serial
  
     serial old
  
     parNew
  
     parallel scavenge,追求 CPU 吞吐量
    
     吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)  
     parallel old
  
     CMS
    
     四个阶段    
     初始标记
  
     并发标记
  
     重新标记
  
     并发清除
  
     缺点    
     1、并发收集会占用CPU资源
  
     2、会产生浮动垃圾
  
     3、产生碎片空间
  
     总结    
     设计目的
    
     最求最短垃圾回收暂停时间  
     回收过程
    
     初始标记、并发标记、并发预处理、重新标记和并发清除
  
     弊端
    
     会产生内存碎片、需要空间预留、停顿时间是不可预知的  
     被弃用的原因    
     1、CPU占用不可控  
     2、退化成SerialOld,暂停用户线程,单线程回收,性能下降  
     3、停顿时间不可预知  
     G1    
     基本原理
  
     如何做到可预测的停顿时间?
    
     Java堆进行Region拆分  
     追踪每个Region的回收价值
  
     建立可预测的停顿时间模型
  
     大对象处理
  
     新生代垃圾回收
    
     1个eden和2个survivor
    
     示例  
     老年代垃圾回收
    
     是一种复制算法,不会产生碎片
  
     新老年混合回收
  
     G1回收失败时的Full GC
  
     什么时候使用G1?
  
     各种收集器使用场景  
     jvm调优  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 