JVM面试总结
1. Java虚拟机的内存布局(运行时数据区)
参考:https://www.cnblogs.com/lostyears/articles/8984171.html
2. GC算法及几种垃圾收集器
对象生存判断算法有两种:引用计数法 和 可达性分析算法
垃圾收集算法:标记-清除算法、复制算法、标记-整理算法、分代收集算法
垃圾收集器:
收集器 | 算法 |
Serial | 复制算法(单线程) |
ParNew | 复制算法(多线程) |
Parallel Scavenge | 复制算法(多线程)吞吐量高 |
Serial Old | 标记-整理算法(单线程) |
Parallnel Old | 标记-整理(多线程) |
CMS | 标记-清除(并发) 最短回收停顿时间 |
G1 | 标记-整理 |
参考:https://www.cnblogs.com/lostyears/articles/8989455.html
3.如何理解双亲委派模型及为什么要使用这种机制
从Java虚拟机的角度来说,有两种不同的类加载器:启动类加载器和其它类加载器。
它的好处可以用一句话总结,即防止内存中出现多份同样的字节码。
参考:https://www.cnblogs.com/lostyears/articles/9015864.html
4.Java内存模型及happens-before规则/volatile关键字
JVM定义了一组规则,通过这组规则来决定一个线程对共享变量的写入何时对另一个线程可见,这组规则也称为Java内存模型(即JMM),JMM是围绕着程序执行的原子性、有序性、可见性展开的,下面我们看看这三个特性。
happens-before 原则是用来来辅助保证程序执行的原子性、可见性以及有序性的问题。
volatile是Java虚拟机提供的轻量级的同步机制,保证被volatile修饰的共享变量对所有线程总数可见的,禁止指令重排序优化。
参考:https://blog.csdn.net/javazejian/article/details/72772461