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

Posted 阿昌喜欢吃黄桃

tags:

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

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

一、快速回顾

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的认识


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

Elasticsearch-尚硅谷(9. 面试题)学习笔记

iOS经典面试题之深入分析block相关高频面试题

尚硅谷axios入门与源码分析视频教程发布!

Java核心面试宝典Day14“线程池”高频面试题总结!✊✊✊

Java核心面试宝典Day14“线程池”高频面试题总结!✊✊✊

动态规划高频题汇总 | 今日直播划重点