Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实现了Java语言最重要的特征:即平台无关性,同时学习JVM也是一个java程序员在成长过程中的必经之路。本系列博客总结了笔者在学习JVM时的一些经验和面试要点,希望可以帮助到大家。
为了方便阅读,把本系列博文的目录整理如下:
一、JVM内存区域详解
二、OutOfMemoryError实战
以上两篇博客主要讲了JVM中的内存分配,包括哪部分区域,什么样的代码可能会导致内存溢出异常,各个区域出现内存溢出异常的原因。
三、JVM之对象的创建
四、Java对象的内存布局
五、Java对象的访问定位
六、jvm之如何判断对象已死?
七、引用(reference)详解
jvm垃圾回收主要是对于java对象的内存回收,所以以上四篇博客详细的讲解了一个对象从生到死的过程,包括对象的创建,对象的内存分配,如何访问一个对象,如何判断一个对象是否死亡。最后第七篇博客详细介绍了引用,建议读者详细阅读。
八、java对象和方法区的垃圾回收
九、垃圾回收算法
十、垃圾收集器
以上三篇博客是JVM垃圾回收的理论部分,介绍了对象和方法区的垃圾回收、垃圾回收算法和垃圾回收器,也是面试当中的重点内容。
十一、GC日志详解
十二、内存回收与分配策略
十三、JDK的命令行工具
十一到十三是JVM调优的实战部分,包括如何阅读GC日志,内存回收与分配策略,还有如何利用JDK当中自带的工具来分析java内存的使用情况。
Java内存模型
volatile变量详解
先行发生原则(happens-before)介绍
线程的实现方式
Java线程调度与线程优先级
线程安全
以上六篇博文从jvm的角度介绍了并发的一些原理,介绍了虚拟机如何实现多线程、多线程之间由于共享和竞争数据而导致的一系列问题及解决方案。
下图是以上六篇博文的思维导图: