JAVA面试——JVM

  • Java垃圾回收机制
    • 判断对象已死方法:
      • 引用计数法(循环引用)
      • 可达性分析
        • GC Roots:
          • 虚拟机栈中的引用对象
          • 方法区中静态属性引用对象
          • 方法区中常量引用对象
          • 本地方法栈中JNI(Java native interface)引用的对象
      • 引用分类:
        • 强引用、软引用、弱引用、虚引用
    • 垃圾回收算法:
      • 标记-清除算法
        • 效率低、内存碎片
      • 标记-整理算法
        • 老年代使用,存活对象向一端移动
      • 复制算法
        • 内存划分为两等份,新生代,Eden Survivor 8:1:1
      • 分代收集算法
        • 新生代:复制,老年代:标记清除、标记整理
    • 垃圾收集器:
      • Serial&Serial Old
        • 单线程,垃圾收集时暂停所有用户线程
        • Serial针对新生代,复制算法
        • Serial Old针对老年代,标记整理算法
        • 简单高效,用户停顿
      • ParNew
        • Serial多线程版本,Serial和ParNew能和CMS(老年代)配合
      • Parallel Scavenge
        • 新生代多线程收集器,复制算法,吞吐量可控!(运行用户代码时间:CPU总消耗时间)
      • Parallel Old
        • Parallel Scavenge老年代版本,多线程,标记整理
      • CMS
        • 最短回收停顿时间,并发收集器,标记清除
      • G1
        • 并行与并发,充分利用多CPU、多核环境,停顿时间可预测
    • Minor GC & Full GC & Major GC:
      • Minor GC:新生代垃圾回收,Eden区满就发生
      • Major GC:清理老年代,常伴随一次Minor GC,比Minor GC慢10倍
      • Full GC:清理老年代和新生代
    • 对象分配规则:
      • 优先分配在Eden区
      • 大对象进入老年代
      • 长期存活对象进入老年代
      • 动态判断年龄
  • Java内存模型
    • 运行时数据区
      • 程序计数器:用来指示执行哪条指令(地址)
      • Java栈(虚拟机栈):每一个栈帧对应一个被调用的方法(Java方法)
        • 局部变量表、操作数栈、指向运行时常量池的引用、方法返回地址
      • 本地方法栈:执行本地方法服务
      • 堆:程序员可以管理,用来存储对象本身以及数组
      • 方法区(永久代):类信息、静态变量、敞亮、编译器编译后的代码
        • 运行时常量池:每一个类或者接口的常量池运行时表现形式
posted @ 2019-02-02 15:33  李怕怕  阅读(189)  评论(0)    收藏  举报