JVM八股文精简
目录
- 简述JVM类加载过程
- 简述JVM中的类加载器
- 简述双亲委派机制
- 双亲委派机制的优点
- 简述JVM内存模型
- 简述程序计数器
- 简述虚拟机栈
- 简述本地方法栈
- 简述JVM中的堆
- 简述方法区
- 简述运行时常量池
- 简述Java创建对象的过程
- 简述JVM给对象分配内存的策略
- Java对象内存分配是如何保证线程安全的
- 如何判断对象是否是垃圾
- 简述java的引用类型
- 简述标记清除算法、标记整理算法和标记复制算法
- 简述分代收集算法
- 简述Serial垃圾收集器
- 简述ParNew垃圾收集器
- 简述Parallel Scavenge垃圾收集器
- 简述CMS垃圾收集器
- 简述G1垃圾收集器
- 简述MinorGC
- 简述Ful GC
- 常见内存分配策略
- JVM常见调优参数
简述JVM类加载过程
1)加载:
- 通过全类名获取类的二进制字节流。
- 将类的静态存储结构转化为方法区的运行时数据结构。
- 在内存中生成类的Class对象,作为方法区数据的入口
2)验证:对文件格式,元数据,字节码,符号引用等验证正确性
3)准备:在方法区内为类变量分配内存并设置为0值。
4)解析:将符号引用转化为直接引用。
5)初始化:执行类构造器clinit方法,真正初始化。
简述JVM中的类加载器
- BootstrapClassLoader启动类加载器:加载/lib下的jar包和类。由C++编写。
- ExtensionClassLoader扩展类加载器:/lib/ext目录下的jar包和类。由Java编写。
- AppClassLoader应用类加载器:加载当前classPath下的jar包和类。由Java编写。
简述双亲委派机制
某个类加载器收到类加载请求之后,首先判断当前类是否被加载过。已经被加载的类会直接返回,如果没有被加载,首先将类加载请求转发给父类加载器,一直转发到启动类加载器只有当父类加载器无法完成时才尝试自己加载。
加载类顺序:
BootstrapClassLoader->ExtensionClassLoader->AppClassLoader->
CustomClassLoader
检查类是否加载顺序:CustomClassLoader->AppClassLoader->
ExtensionClassLoader->BootstrapClassLoader
双亲委派机制的优点
- 避免类的重复加载。相同的类被不同的类加载器加载会产生不同的类,双亲委派保证了Java程序的稳定运行。
- 保证核心API不被修改。
简述JVM内存模型
线程私有的运行时数据区:程序计数器、Java 虚拟机栈、本地方法栈。
线程共享的运行时数据区:Java 堆、方法区。
简述程序计数器
程序计数器表示当前线程所执行的字节码的行号指示器。
程序计数器不会产生StackOverflowError和OutOfMemoryError。
简述虚拟机栈
Java 虚拟机栈用来描述 Java 方法执行的内存模型。线程创建时就会分配一个栈空间,线程结束后栈空间被回收。
栈中元
原文地址:https://blog.csdn.net/qq_56699753/article/details/144169144
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!