zoukankan      html  css  js  c++  java
  • jvm及并发面试题

    JVM常见面试题

    https://blog.csdn.net/qq_41701956/article/details/100074023

    1. JVM的内存空间

    线程独有:
    程序计数器
    虚拟机栈
    本地方法栈
    线程共有:

    方法区

    2.JAVA堆内存分配 JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor

    3.垃圾回收

    触发

    Minor GC:eden区满
    Major GC:
    Full GC:

    1. System.gc()
    2. 老年代满
    3. 方法区满

    确定垃圾的方法

    1.引用计数
    2.可达性分析:通过GCroots(虚拟机栈引用的对象、本地方法栈引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象)作为起点搜索,若对象至少两次没有可达路径,则为可回收对象

    算法

    1. 标记-清理
    2. 标记-复制
    3. 标记-整理
    4. 分代回收
    5. 分区收集算法:
    • 将整个堆空间划分为多个连续的小区间,每个区间单独使用,独立回收,这样可以控制一次回收多个小区间,每次合理的回收若干个小区间而不是整个堆。

    进入老年代的条件:
    在SurvivalTo区没有足够的空间存储某个对象时,会直接进入老年代;其他正常情况下,活过15次GC的对象会进入老年代。

    垃圾收集器
    新生代

    • Serial: 单线程垃圾收集器, 标记-复制
    • Par New: 多线程版本,标记-复制
    • Parallel Scavenge: 面向吞吐量的垃圾收集器,标记-复制
      老生代:
    • Serial Old: 老年代版本,标记-整理
    • Parallel Scavenge:Parallel Scavenge 的老年代版本,标记整理
    • CMS: 追求最短回收停顿时间的垃圾收集器,标记清理; 初始标记,并发标记,重新标记,并发清理

    新生代+老年代

    • G1 : 追求可预测的停顿时间 ,标记整理算法;初始标记,并发标记,最终标记,并发清理

    4.垃圾回收流程 初始标记,并发标记,最终标记,并发清理

    5.内存溢出和内存泄露

    内存溢出:没有足够的内存分配
    内存泄露:分配的内存没有回收

    6.类加载机制

    https://www.jianshu.com/p/dd39654231e0

    • 加载:根据类的全限定名称获取类的字节码,根据字节码生成在内存中生成一个Class对象,作为类的入口
    • 链接:
      验证: 确保class文件符合JVM规范 1. 4.符号验证
      准备:初始化类变量为零值
      解析:将符号标记引用为指针引用
    • 初始化:调用方法,该方法是JVM自动收集类变量的赋值 和static代码块生成

    7.双亲委派模型

    类加载器 :启动类加载器,扩展类加载器,应用类加载器
    如何打破双亲委派模型?

    8.synchronize和Reentrantlock

  • 相关阅读:
    Java基础小结
    Struts2
    Ajax
    IIS 调优、支持同时10万个请求
    sqlserver2014 数据完整备份、日志备份
    windows server 2016添加开机启动项
    FileZilla服务器
    Windows server 2016 设置多用户登陆
    centos7 调整XFS格式的磁盘容量大小
    IIS 500.19 0x8007000d 0x80070032 0x80070021 提示“执行此操作时出错”
  • 原文地址:https://www.cnblogs.com/zhouyu0-0/p/14811742.html
Copyright © 2011-2022 走看看