JVM小结
2021/6/15 10:51:17
本文主要是介绍JVM小结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
常见的几个面试问题
-
请你谈谈你对jvm(java虚拟机)的理解,java8虚拟机与之前相比的变化
在 Java 中,JVM可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。
Java8新特性之虚拟机的改变:撤销了永久带,引入了元空间
Java7和Java8的区别 -
什么是OOM,什么是栈溢出,怎么分析?
- 尝试扩大堆内存看结果
- 分析内存,看一下哪个地方出了问题
内存快照分析工具:Jprofiler,MAT(eclipse)
Jprofiler作用:分析Dump内存文件,快速定位内存泄漏;获得堆中的数据,获得大的对象
详细解释OOM
-
JVM常用调优参数有哪些?
堆内存调优:VMoptions
(1) -Xms:初始堆大小,默认是物理内存的1/64。默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到–Xmx的最大限制。例如:-Xms 20m。
(2) -Xmx:最大堆大小。默认是物理内存的1/4 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
(3) -XX:NewSize=n:设置年轻代大小(初始值)
(4) -XX:MaxNewSize:设置年轻代最大值
(5) -XX:NewRatio=n:设置年轻代和年老代的比值
(6) -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值
(7) -XX:PermSize(1.8之后改为MetaspaceSize) 设置持久代(perm gen)初始值,默认是物理内存的1/64。
(8) -XX:MaxPermSize=n:(1.8之后改为MaxMetaspaceSize)设置最大持久代大小。
(9) -XX: +PrintGCDetails -->打印GC垃圾回收信息
(10)-XX: +HeapDumpOnOutOfMemoryError -->oom DUMP -
内存快照如何抓取,如何分析Dump文件
获取dump文件的方式分为主动和被动
- 主动方式:
(1) 利用jmap,也是最常用的方式:jmap -dump:[live],format=b,file=
(2) 利用jcmd,jcmd GC.heap_dump
(3) 使用VisualVM,可以界面操作进行dump内存
(4) 通过JMX的方式 - 被动方式
被动方式就是我们通常的OOM事件了,通过设置参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=
通过Jprofiler打开,分析:上栏Biggest Objects,左栏Thread Dump
-
谈谈JVM中,你对类加载器的认识
作用:加载class文件
双亲委派机制:
APP–>EXC—B0OT(最终执行)
(1) 类加载器收到类加载的请求
(2) 将这个请求向上委托给父类加载器去完成,一 直向上委托,知道启动类加载器
(3) 启动加载器检查是否能够加载当前这个类,能加载就结束, 使用当前的加载器,否则, 抛出异常,通知子加载器进行加载
(4) 重复步骤3
双亲委派机制的作用:
(1) 防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
(2) 保证核心.class不能被篡改。通过委托方式,不会去篡改核心.class,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。
类加载的五个步骤:加载,验证、准备、解析,初始化 -
其他面试题
-
狂神JVM笔记
这篇关于JVM小结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南