JVM题目

1.jvm垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots

        引用计数法--无法解决循环引用的问题

        枚举根节点做可达性分析(根搜索路径):java中可以作为gc roots的对象 --

                1. 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。

                2.方法区中的类静态属性引用的对象

                3.方法区中常量引用的对象

                4.本地方法栈中Native方法引用的对象

2.你说你做过jvm调优和参数配置,请问如何盘点查看jvm系统默认值?

        1.jvm的参数类型:

                标配参数:-version -help

                x参数(了解):-Xint 解释执行 -Xcomp 第一次使用就编译 -Xmixed 混合模式

                xx参数(重点):

                Boolean类型:

                公式:-XX:+或-某个属性值 +表示开启 -表示关闭

        2.如何查看java程序运行时是否有是否打印GC收集细节这个参数:

                jps 查看进程编号

                jinfo 查看某个属性值 --公式:jinfo -flag 配置项 进程编号 或者 flags查看全部

                KV设值类型:例如:

                        -XX:MaxTenuringThreshold=15

                        -XX MetaspaceSize=128m

         3.jinfo举例,如何查看当前运行程序的配置

        题外话(坑题):

                -Xms和-Xmx 这个你如何解释?

                        其实就是别名:等价于-XX:InitialHeapSize和-XX:MaxHeapSize

                查看参数盘点家底:

                        第一种:jps jinfo -flag

                        第二种:java -XX:+PrintFlagsInitial 查看初始化参数

                                        java -XX:+PrintFlagsFinal 主要查看修改更新

                                        打印出来的 =是初始的 :=是修改过的

PrintFlagsFinal 举例,运行java命令的同时打印出参数:

PrintCommandLineFlags:

3.你平时工作中用过的jvm常用基本配置参数有哪些?

        初始堆内存默认为是内存的1/64

        最大堆内存大小默认为是内存的1/4

        常用参数:

-Xss :设置单个线程栈的大小 ,一般默认为512k-1024k ,等价于:-XX:ThreadStackSize

栈管运行,堆管存储

默认值一般和平台有关:

-Xmn :设置年轻代大小 --一般不需要改

-XX:MetaspaceSize :设置元空间大小

典型设置案例:

-XX:+PrintGCDetails : 输出详细GC收集日志信息

GC:

FullGC:

规律:

-XX:SurvivorRatio:

-XX:NewRatio:

--XX:MaxTenuringThreshold:

4.强引用、软引用、弱引用、虚引用分别是什么?

组织架构图:java.lang.ref包

强引用:oom了都不收,死都不收

软引用:内存够用就保留,不够就回收

弱引用:只要有gc就回收

虚引用: 形同虚设的引用,虚引用必须和引用队列联合使用,主要用来做回收对象的监控

引用队列:ReferenceQueue--gc的时候会放入队列

软引用的适用场景:

你知道弱引用的话,能谈谈WeakHashMap吗

可以回收的HashMap

GCRoots和四大引用小总结:

5.请谈谈你对OOM的认识

java.lang.StackOverflowError : 栈满了 例如 递归程序 深度的方法调用

java.lang.OutOfMemoryError: java heap space 堆内存不够了 对象太多了

java.lang.OutOfMemoryError: GC overHead limit exceeded

java.lang.OutOfMemoryError: Direct buffer memory

java.lang.OutOfMemoryError: unable to create new native thread 不能再创建新的线程了

java.lang.OutOfMemoryError: Metaspace 元空间被撑满

元空间存了哪些东西?

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

GC算法(引用计数--复zi--标记清除--标记整理)是内存回收的方法论,垃圾收集器就是算法实现落地。

垃圾收集器:

Serial 串行 为单线程环境设计 ,开启一个垃圾收集线程收集垃圾,会暂停用户线程

Parallel 并行 开启多个垃圾收集线程,也会暂停用户线程

串行和并行都会导致STW问题 :暂停整个应用 可能时间很长

CMS 并发 用户线程和垃圾收集线程同时执行,适用于对响应时间有要求的场景

G1 比较特殊 :G1垃圾回收器将堆内存分割成不同的区域然后并发的对其进行回收

 

7.怎么查看服务器默认的垃圾收集器是哪个?生产上如何配置垃圾收集器的?谈谈你对垃圾收集器的理解?

java -XX:+PrintCommandLIneFlags -version

        1.默认的垃圾收集器有哪些?

UseSerialGC UseParallelGC UseConcMarkSweepGC UseParNewGC useParallelOldGC UseG1GC

        2.新生代和老年代GC适合用哪种垃圾收集器?

        3.如何选择垃圾收集器?

        4.Server/Client模式分别是什么意思?

8.G1垃圾收集器

        1.特点:

启动时可以通过-XX:G1HeapRegionSize=n 可以指定分区大小(1-32mb,且必须是2的幂),默认将堆分成2048个分区

        2.g1和CMS相比的优势

1.G1不会产生内存碎片

2.可以精确控制停顿

9.jvmgc+springboot实际工作中,如何结合springboot进行调优?

步骤:

1.idea开发完微服务工程

2.maven进行clean package

3.要求微服务启动的时候,同时配置我们的JVM/GC的调优参数

3.1内

3.2外 ---例如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值