内存管理

  • 讲义回顾:234重点
  • 内存管理: 7和8的区别;
    • 8多了本地内存:直接内存和元空间
    • 7的方法区在永久代;8在元空间
  • 年轻代什么时候进入老年代
    • 默认阈值15代,放入老年代
    • survivor装不下
    • 默认1:2 , 8:1:1
  • 方法区里面有什么
    • 类信息
      • 类型信息: 类名、付雷鸣、修饰符、接口列表
      • 域信息: 成员变量的各种信息
      • 方法信息
    • 运行时常量池
    • JIT代码缓存
  • 常量池与运行时常量池
    • 常量池:存放编译期间生成的各种字面量与符号引用
    • 运行时常量池:产量池在运行时的表现形式(8以后放在堆里)
    • 关系:变异后的字节码文件中包含了类型信息、域信息、方法信息。将字节码中的信息加载到运行时常量池
  • 直接内存
    • JVM之外
    • 场景:
      • 改善堆郭达时垃圾回收效率,减少停顿。FUll GC会扫描堆内存。存在本地,由草祖宗系统处理
      • 减少拷贝损耗问题。减少内存在Native对和JVM堆拷贝过程,避免拷贝损耗,降低内存使用
      • 可突破JVM内存大小的限制

JVM加载机制

  • 类加载子系统
    • 加载、连接(验证、准备、解析)、初始化、使用、卸载
  • 加载
    • 预加载、JVM自己启动时候需要加载的
    • 运行时加载
  • 初始化
    • :类的初始化阶段
    • : 对象的初始化阶段
  • 类加载
    • 启动(引导)类加载器BootStrapClassLoader
      • c/c++, 嵌套在jvmneibu
      • 用于JVM自身需要的类
      • 并不继承ClassLoader,没有父加载器
    • 扩展类加载器ExtensionClassLoader
      • 父类是启动类加载器
      • java编写
    • 系统类加载器SystemClassLoader
      • 父类为扩展类加载器
      • 通过ClassLoader#getSystemClassLoader()方法可以获得
  • 双亲委派机制

    • 先去看父类是否有,如果父类没有,自己才加载

      调优策略

  • JVM调优指调优GC,或者内存溢出出问题

  • 判断对象是否死亡算法
    • 引用计数算法(不用)
      • 循环引用问题
    • 可达性分析算法
      • 不可达的【可能】是垃圾;先标记一下
      • 后面放在一个回收队列中,调用finalize方法,如果还不行,才回收

  • GC Root
    • 方法区的对象
    • 虚拟机栈的局部变量表
    • 本地方法栈的对象
  • 垃圾收集算法
    • 分带收集理论

image.png

  • 标记清除算法
  • 标记复制算法
  • 标记整理算法
    • 垃圾回收器

image.png
image.png
CMS回收器: 相当于老年代的回收器,JDK14取消掉了

  1. - CMS如果出问题,可以和Serial OldGC组合
  • 图中实线为可以组合的方案;虚线为不建议的组合
    • ParNew和Parallel区别?
    • GC的安全点和安全域
  • stop the world必须在安全点和安全域的时候
  • 安全点为:方法返回结束,或者周期结束
    • Serial
  • 使用方式: -XX:+UseSerialGC 相当于配置两个GC回收器
  • 会 stop the world
  • 新生代复制算法;老年代整理算法
    • ParNew
  • Serial GC的多线程版本
  • 会stop the world
  • -XX:+UseParNewGC
  • 只作用年轻代
  • 与CMS组合,一个回收年轻,一个回收老年
    • Parallel
  • 年轻代; 复制算法
  • 吞吐量优先
    • 吞吐量= 用户应用执行时间 / (停顿时间 + 用户应用执行时间)
      • Parallel Old
  • 与Parallel类似
  • 老年代;吞吐量; 整理算法
    • CMS
  • 最短停顿时间
  • 因为并行,所以用户不会卡顿
  • 由于程序运行,所以可能重新标记。
  • 并发清理、重置线程

image.png

  • G1

image.png
image.png
蓝色表示巨大的对象humongous
image.png

  • 常用命令

image.png
image.png
image.png
image.png
image.png
image.png
image.png

  • 常用工具
    • jconsole 监控管理工具
      • java bin下有exe文件
    • VIrtualVM 可视化优化工具
      • java bin下有exe文件
  • GC日志分析
  • GC日志分析工具
    • 在线: https://gceasy.io/index.jsp
    • GCViewer是一个小工具,可以可视化展示。支持Sun/Oracle,IBM,HP和Bea的JAVA虚拟机

image.png

常见面试题