Day489&490&491.尚硅谷之高频重点面试题③ -面经

Posted 阿昌喜欢吃黄桃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day489&490&491.尚硅谷之高频重点面试题③ -面经相关的知识,希望对你有一定的参考价值。

尚硅谷之高频重点面试题③

一、快速回顾

1、JVM内存结构

  • 类的加载器是什么?
  • 双亲委派机制是什么?
  • Java沙箱安全机制是什么?

  • 堆的由什么组成?
    • 新生代
      • 幸存者1
      • 幸存者2
      • 伊甸区
    • 养老区
    • 永久代(7)、元空间(8)

2、GC作用域

  • 哪些部位是JVM线程私有的?
    • 程序计数器
    • Java栈
    • 本地方法栈
  • JVM线程共有?
    • 方法区

3、常见垃圾回收算法

  • 引用计数算法

    有对象引用+1,没对象引用-1。存在循环引用问题

  • 标记清除

    • 先标记出要回收的对象,后清除
    • 存在内存碎片
    • 相比复制算法,节约了内存空间
  • 标记压缩

    • 先标记出要回收的对象,后清除,再压缩整理内存碎片
    • 没有内存碎片
    • 有移动对象的成本
    • 相比另外的算法,更耗时
  • 复制算法

    • 堆空间年轻代的幸存者1/2区在用,谁空谁是to
    • 没有内存碎片
    • 需要2倍的内存空间

二、JVM垃圾回收的时候如何确定垃圾?是否知道什么是GCRoots?

  • 是什么垃圾?

    内存中已经不再使用到的空间就是垃圾

  • 如何判断一个对象是否可以被回收?判断方法有哪些?

    • 引用计数法

    • 可达性分析法

      被GCRoots直接或间接引用可达就不会被回收

  • 哪些对象可以作为GCRoots?

    两个栈,两个方法区


三、如何盘点查看JVM系统默认值?

1、参数类型

  • 标配参数

    • -version
    • -help
    • java -showversion
  • X参数(了解)

    • -Xint 解释执行
    • -Xcomp 第一次使用就编译成本地代码
    • -Xmixed 混合模式
  • XX参数

    • Boolean类型

      -XX:+
      -XX:-
      # +表示开启,-表示关闭
      
      # 举例
      -XX:+PrintGCDetails
      
    • KV键值对类型

      # 举例
      -XX:MetaspaceSize=1024m
      


2、怎么查看一个正在运行的java进程的jvm参数?

jinfo -flag <具体参数名> <java进程号>
jps
jinfo -flags <java进程号>

3、如何查看参数盘点家底

-XX:+PrintFlagsInitial #初始值
-XX:+PrintFlagsFinal #最终值

四、平时常用的JVM常用基本配置参数有哪些?

常用参数典型案例

-Xms128m -Xmx4096m -Xss1024kb -XX:MetaspaceSize=512m -XX:PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC

  • -Xmx

    • 最大堆空间内存大小,默认物理内存的1/4
    • 等价:-XX:InitialHeapSize
  • -Xms

    • 初始堆空间内存大小,默认物理内存的1/64
    • 等价:-XX:MaxHeapSize
  • -Xss

    • 设置单线程栈的大小,默认512k-1024k
    • 等价:-XX:ThreadStackSize

  • -Xmn

    • 设置堆空间新生代内存大小(一般不动)
  • -XX:MetaspaceSize

    • 设置元空间大小
  • -XX:PrintGCDetails

    • GC收集日志

  • -XX:SurvivorRatio(一般不动)

    • 设置伊甸园区比例占用,默认为8,8:1:1

  • -XX:NewRatio

    • 设置新生代与老年代比例占比,默认为2,1:2
  • -XX:MaxTenuringThreshold

    • 设置垃圾回收年龄阈值,默认为15,要求设置范围在:0-15


五、强/软/弱/虚引用是什么?你能说说吗?

  • 强引用(默认支持)

    • 就算出现OOM也不会对该对象进行GC垃圾回收,死都不收
  • 软引用

    • 不够就收
  • 弱引用

    • GC就收
  • 虚引用

    对象回收的监控

    虚引用对象被回收之前,会被放置在对应关联的引用队列中,可以从引用队列取出,做一些想做的操作(死之前)

小总结

强引用:在垃圾回收之外,永不回收

软引用:内存不足就回收

弱引用:GC就回收

虚引用:GC前/GC后都无法获取到对象,形如虚设,回收前会被放入引用队列


六、请你谈谈对OOM的认识


七、GC垃圾回收算法和垃圾收集器的关系?分别是什么请你谈谈?

  • 主要的垃圾回收器

    • Serial串行回收
      • 只有单线程去做GC,并且在执行GC时,其他所有用户线程将不能工作
    • Parallel并行回收
      • 多线程去做GC,工作时会暂停所有用户线程
    • CMS并发标记清除
      • 用户线程和GC线程可并行或交替执行,不需要用户线程停顿等待
    • G1分代回收
      • 将堆内存分割成一块一块的区域,并并发的对其垃圾回收

  • GC算法是方法论,垃圾回收器是落地的实现

  • 现在完美的垃圾回收器,对应的场景需要使用对应适合的垃圾回收器


八、如何查看服务器默认的垃圾回收器?生成上如何垃圾回收器?谈谈你对垃圾回收器的理解?

  • 查看默认垃圾回收器
-XX:+PrintCommandLineFlags -version

  • 设置垃圾回收器

-XX:+UseSerialGC
-XX:+UserXXX
  • 新生代&老年代对应使用的垃圾回收器

  • 垃圾回收器

    https://achang.blog.csdn.net/article/details/119155126

    • Serial回收器【串行回收】

      • 单线程环境,简单高效,不需要线程切换开销
    • ParNew回收器【并行回收】

      • 多线程版本的Serial回收器,多线程环境情况下性能更优
    • Parallel回收器【吞吐量优先】

      • 吞吐量优先,多线程情况下性能较好,与用户交互较少,高吞吐量
    • CMS回收器【低延迟】

      • 低延迟(低STW时间),并发收集

      • 执行过程:

    • G1回收器【区域化分代式】

      • 并发与并行
      • 分代收集
      • 空间整合(进行复制算法会对内存空间的整合)
      • 避免了全内存扫描,变成了区域Region扫描
      • 可预测停顿时间模型(近可能靠近设置的停顿时间值)
  • 如何选择合适的垃圾收集器

  • G1和CMS垃圾回收器的区别
    • 相同点
      • 都可并发的垃圾回收
    • 不同点
      • G1不存在内存碎片
      • G1进行小范围的垃圾回收
      • G1可以指定预期停顿时间

九、SpringBoot结合JVM生产优化调参

java -server jvm各种参数 -jar xxx.jar/war
java -server -Xms1024m -Xmx1024m -XX:+UseG1GC -jar achang.jar


以上是关于Day489&490&491.尚硅谷之高频重点面试题③ -面经的主要内容,如果未能解决你的问题,请参考以下文章

《30天自制操作系统》14_day_学习笔记

刽子手游戏(UVa489)

CodeforcesCodeforces Round #491 (Div. 2) (Contest 991)

TopCoder 最佳选择算法来自 SRM 489 DIV 2 (500 pt)

CodeForces 489C Given Length and Sum of Digits...

Day489.尚硅谷之高频重点面试题③ -面经