jvm面试知识结构


jvm面试知识结构

  • 类加载顺序
    • 加载:将java的class文件加载,用ClassLoader.loadClass加载。
    • 链接
      • 验证:验证字节码是否符合jvm规范。
      • 准备:
        • static final:会将值直接赋予
        • 非static final:给予对象或者字段初始化值
      • 解析:将连接引用转化为直接直接引用
    • 初始化
      • new、getstatic、putstatic、invokestatic、反射调用的进行初始化操作
      • 如果父亲类未初始化先初始化父类
    • 调用
    • 销毁
  • jvm模型
    • 线程共享
      • 堆:存放对象实例,并初始化参数。
        • 堆又称为gc堆
          • 标记算法
            • 程序计数算法:
              • 每个对象实例都有一个引用计数器,引用则被+1,完成则-1
              • 判断对象引用数量来决定对象是否可以回收。
            • 可达性算法:
              • 判断引用链是否可达来决定对象是否回收
              • 根据gc root判断是否可达
          • 回收算法
            • 标记-清除算法
              • 特点
                • 标记:从根集合进行扫面,对存活对象标记
                • 清除:对堆内存从头到尾线性遍历,回收不可达内存
              • 缺点:导致碎片化
            • 标记-整理算法
              • 特点
                • 标记:从根集合进行扫面,对存活对象标记
                • 整理:移动所有存活对象,且按照内存地址次序一次排序,然后将末端内存全部回收
              • 优缺点:
                • 避免内存不连续
                • 不用设置两块内存地址
                • 适用于存活率高场景=》老年代回收
            • 复制算法
              • 特点:
                • 分为对象面和空闲面
                • 对象在对象面创建
                • 存活对象从对象面复制到空闲面
                • 将对象面所有对象内存清除
              • 优缺点:
                • 解决碎片化问题
                • 顺序分配内存简单高效
                • 适用于对象存活率低场景
            • 分代收集算法(组合算法)
              • 年轻代
                • 存活率低一般采用复制算法,尽可能快的收集生命周期短的对象
                • 一个Eden区占80%,两个Surrivor区各占10%
              • 老年代
                • 经过一定次数复制仍然存活的对象(每次复制+1)
                • Surrivor区放不下的
                • 新生成的大对象
      • 方法区:存储被jvm加载的类信息,常量、静态变量
        • 永久代:jdk1.8后移到元空间(jvm外部内存)
    • 线程私有
      • 程序计数器:
        • 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制。
        • 多线程情况下,程序计数器记录程序执行行号位置。
      • 虚拟机栈
        • java方法执行的内存模型(后进先出)
        • 包含多个栈帧(包含:局部变量、操作数栈、动态链接、返回地址)
        • 递归会导致StackOverFlowError异常,递归过深栈幁数超过虚拟机栈深度。
      • 本地方法栈:和虚拟机栈类似,主要作用于了Native方法。

参考资料:

MinorGC 和 FullGC的理解


文章作者: zhaolin.long
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zhaolin.long !
 本篇
jvm面试知识结构 jvm面试知识结构
jvm面试知识结构 类加载顺序 加载:将java的class文件加载,用ClassLoader.loadClass加载。 链接 验证:验证字节码是否符合jvm规范。 准备: static final:会将值直接赋予 非static fina
2020-06-15
下一篇 
计算机网络基础知识 计算机网络基础知识
计算机网络基础知识 OSI七层模型 物理层:定义物理设备的标准,将比特流转换为电流强弱传输(数模转换与模数转换) 数据链路层: 网络实体间数据链路通路建立、维持和释放管理(点对点信道和广播信道) 物理层在传输介质上传输会存在误差,因此数据
2020-06-15
  目录