请你谈谈你对jvm(java虚拟机)的理解,java8虚拟机与之前相比的变化
在 Java 中,JVM可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。
Java8新特性之虚拟机的改变:撤销了永久带,引入了元空间
Java7和Java8的区别
什么是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文件的方式分为主动和被动
谈谈JVM中,你对类加载器的认识
作用:加载class文件
双亲委派机制:
APP–>EXC—B0OT(最终执行)
(1) 类加载器收到类加载的请求
(2) 将这个请求向上委托给父类加载器去完成,一 直向上委托,知道启动类加载器
(3) 启动加载器检查是否能够加载当前这个类,能加载就结束, 使用当前的加载器,否则, 抛出异常,通知子加载器进行加载
(4) 重复步骤3
双亲委派机制的作用:
(1) 防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
(2) 保证核心.class不能被篡改。通过委托方式,不会去篡改核心.class,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。
类加载的五个步骤:加载,验证、准备、解析,初始化
其他面试题
狂神JVM笔记