JVM简书

面试题汇总

1 谈谈jvm的理解?java8虚拟机和之前的变化更新
minorGC fullGC
2 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析?
3 JVM常用的调优参数有哪些?
4 内存快照如何抓取,怎么分析Dump文件?
5 谈谈jvm中,类加载器的认识
笔记一图流

特性简述

1 jvm的位置

2 jvm的体系结构
类加载子系统
运行时数据区
线程共享区
堆 新生代 年轻代 老年代
方法区 系统方法 变量 数据
线程独占区
虚拟机栈 本地方法栈 程序计数器
执行引擎
3 类加载器
启动类加载器
扩展类加载器
应用类加载器
自定义加载器
4 双亲委派机制-实例化
【1 查找类是否存在,2 委托到最上级,3存在则加载,否则向下查找类】向上委托,向下查找
5 沙箱安全机制
java代码限制执行再jvm中,域权限,以前有安全策略 代码签名。防止外部调用或java调用破坏系统
6 Native
本地方法接口,java调不到了,C语言底层库,调用的是JNI,调用外部语言C和C++
7 PC寄存器,程序计数器
8 方法区
9 栈
先进先出
10 三种jvm
hotspot
11 堆
实例对象
12 新生区,老年区
13 永久区
常驻内存区域,jdk自身存在的对象,元数据接口,java运行时环境
1.8后无永久代,常量池在元空间
14 堆内存优化
VM option
runtime.getruntiim().getmaxmonory
默认总内存时电脑的1/4 初始化内存1/64
调优-Xms -Xmx -XX:+printGCdetail
OOM内存溢出
使用MAT,JPofiler分析OOM原因
分析dump文件,快速定位内存泄漏-xx:headdump .hprof
获得堆中的数据,获得大对象

15 GC
minorGC fullGC
1 常用算法
标记清除法
标记整理法
复制法
16 JMM
java memory model 内存模型
缓存一致性协议,用于定义数据读写的规则
主内存,线程工作内存拷贝主内存
可见性问题用 volatile,syn解决
8个内存操作指令,定义了一系列的规则来保证一致性
happen-before

jvm虚拟机内存模型

在这里插入图片描述

2 调优注意点
1 默认使用合理的jvm参数,大部分情况不需要调优,优先确认是业务或者特殊情况导致的异常
2 通过jvm核心指标和监控告警,当出现波动时人为介入分析评估,确认必要性和可行性
如何获得 GC频率,GC时间
查看GC日志 Full GC
分析问题的工具
dump
3 调优方式 jvm内存分配大小

3 jvm调优案例

问题1:matespace导致频繁或非预期FGC
过程:查看GC日志
Full GC (metadata GC threshold)
matespace 已使用空间 未释放空间 已分配空间 预留空间
chunk类加载器,存在较多类加载器同时使用率较低
通过dump堆存储文件发现存在大量classloader
通过反射导致的的创建

优化策略
1 调大metespace,适应类加载器的初始化
2 优化不合理的反射调用,减少类加载器
问题2 CMS内存碎片化导致FGC问题
C端核心业务在高峰期服务发生FGC,导致部分请求超时报错,影响用户体验
原因分析:CMS标记清除算法,不进行压缩整理,老年代无法处理大对象,导致FGC
优化策略
业务低峰期显示触发FGC,优化内存碎片并压缩,降低业务高峰期的FGC概率
system.gc(),-XX:+DisableExplicitGC
jmap -histo:live pid
问题3:YGC和Old GC频繁
YGC每分钟50次,每次25毫秒,OLD GC几分钟1次,每次200毫秒
原因:请求频繁,YGC设置较小,导致年轻代对象年龄快速增加到老年代,oldGC频繁
优化策略:扩大新生代内存3倍
优化结果:单次YGC增加5%,频率降低60% 服务TP99降低10ms oldGC为几小时一次
问题4:Old gc耗时长
原因: remark阶段时间较长
优化-XX:+CMSScavengeBeforeRemark 加一次YGC
问题5:YGC耗时增加
原因:jenkins反序列化时会将key进行String#intern,导致扫描时,GCroot变大
解决:禁用jenkin的S#intern
问题6:YGC次数增加
原因:-XX:MaxGCPauseMills参数时间过小,JVM降低年轻代region
解决:1 调大-XX 2 设置region固定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值