问题
- 谈谈对JVM的理解?java8虚拟机和之前的变化更新
- 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析?
- JVM常用的调优参数有哪些?
- 内存快照如何抓取,怎么分析Dump文件?
- 谈谈JVM中你对类加载器的认识?
1、JVM的位置
2、JVM的体系结构
3、类加载器
作用:加载Class文件
1、虚拟机自带的加载器
2、启动类(根)加载器
3、拓展类加载器
4、应用程序加载器
public class Car {
public static void main(String[] args) {
Car car1 = new Car();
Car car2 = new Car();
Car car3 = new Car();
//得到Car的模板,三个对象得到的是同样的模板
Class<? extends Car> car1Class = car1.getClass();
//car的模板
System.out.println(car1Class);
//得到应用程序加载器AppClassLoader,java.lang.ClassLoader
System.out.println(car1Class.getClassLoader());
//得到拓展类加载器ExtClassLoader,jre/lib/ext
System.out.println(car1Class.getClassLoader().getParent());
//null,获取不到,rt.jar
System.out.println(car1Class.getClassLoader().getParent().getParent());
}
}
4、双亲委派机制(面试高频)
package java.lang;
public class String {
//双亲委派机制:保证安全
//程序类加载器->拓展类加载器->根加载器
//程序执行时,会首先在根加载器中寻找这个类,找不到
//再逐渐往下层去找 根加载器->拓展类加载器->程序类加载器
public String toString(){
return "hello";
}
public static void main(String[] args) {
String s = new String();
s.toString();
}
}
5、沙箱安全机制
6、Native
7、PC寄存器
8、方法区
9、栈
10、三种JVM
11、堆
12、新生区、老年区
13、永久区
14、堆内存调优
15、GC(常用算法)
16、JMM