JVM常见面试题
https://blog.csdn.net/qq_41701956/article/details/100074023
1. JVM的内存空间
线程独有:
程序计数器
虚拟机栈
本地方法栈
线程共有:
堆
方法区
2.JAVA堆内存分配 JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor
3.垃圾回收算法
- 标记-清理
- 标记-复制
- 标记-整理
- 分代回收
3.垃圾收集器
新生代
- Serial: 单线程垃圾收集器, 标记-复制
- Par New: 多线程版本,标记-复制
- Parallel Scavenge: 面向吞吐量的垃圾收集器,标记-复制
老生代:
- Serial Old: 老年代版本,标记-整理
- Parallel Scavenge:Parallel Scavenge 的老年代版本,标记整理
- CMS: 追求最短回收停顿时间的垃圾收集器,标记清理; 初始标记,并发标记,重新标记,并发清理
新生代+老年代
- G1 : 追求可预测的停顿时间 ,标记整理算法;初始标记,并发标记,最终标记,并发清理
4.垃圾回收流程
初始标记,并发标记,最终标记,并发清理
5.内存溢出和内存泄露
内存溢出:没有足够的内存分配
内存泄露:分配的内存没有回收
6.类加载机制
https://www.jianshu.com/p/dd39654231e0
- 加载:根据类的全限定名称获取类的字节码,根据字节码生成在内存中生成一个Class对象,作为类的入口
- 链接:
验证: 确保class文件符合JVM规范 1. 4.符号验证
准备:初始化类变量为零值
解析:将符号标记引用为指针引用
- 初始化:调用方法,该方法是JVM自动收集类变量的赋值 和static代码块生成
7.双亲委派模型
类加载器 :启动类加载器,扩展类加载器,应用类加载器
如何打破双亲委派模型?
jvm及并发面试题
原文:https://www.cnblogs.com/zhouyu0-0/p/14811742.html