- 请你谈谈你对jvm的理解?java8虚拟机和之前的变化更新?
- 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析?
- JVM的常用调优参数有哪些?
- 内存快照怎么抓取,怎么分析Dump文件?
- 谈谈JVM中,类加载器的认识?
JVM的位置 ![](https://img-blog.csdnimg.cn/7d49edbaff934995936ef7110cd76052.png)
JVM的体系结构 ![](https://img-blog.csdnimg.cn/7731923baefd4ebb964220641b22343f.png)
类加载器
作用: 加载Class文件
1). 虚拟机自带的加载器
2). 启动类根加载器(boot)
3). 扩展类加载器(ext)
4). 应用程序加载器(app)
双亲委派机制
沙箱安全机制
Native
PC寄存器
方法区
栈
栈帧:
栈满了: StackOverFlowError
!!!栈+堆+方法区: 交互关系
三种JVM
堆
OOM示例:
新生区,老年区,永久区
堆对象生命周期传递示例:
永久区
堆内存调优
jvm内存模型:
配置启动vm参数关注OOM异常
生成操作异常记录文件
点击文件,分析大文件对象,粗略定位可能位置:
分析运行线程执行出现异常的代码位置:
问题具体位置:
示例2:
调整启动vm参数后输出:
GC常用算法
引用计数法:
复制算法:
轻量级gc
1.Eden区轻量级gc后,对象放置到幸存To空区,幸存From区内容也会复制到To空区;
2.From区变成To区,To区变成From区
3.经过一次轻量级gc,Eden区跟幸存To区为空
重量级gc
1.15次gc后,还能存活的堆对象放置养老区,Eden区,幸存区数据清空
标记清除算法:
标记清除压缩算法:
总结