Java 虚拟机原理
JVM 的主要组成部分:类加载器、运行时数据区、执行引擎。
运行时数据区主要包括:方法区、堆、Java 栈、程序计数寄存器。
方法区:存放从磁盘中加载进来的类字节码,程序运行过程中创建的类实例则存放在堆中。
Java 栈:每个线程独占,存放着方法运行时的局部变量。
程序计数寄存器:存放着当前线程执行到哪一行字节码指令。
执行引擎在执行字节码指令的时候,是解释执行的,也就是每个字节码指令都会被解释成一个底层的 CPU 指令,但是这样的解释执行效率比较差,JVM 对此进行了优化,将频繁执行的代码编译为底层 CPU 指令存储起来,后面再执行的时候,直接执行编译好的指令,不再解释执行,这就是 JVM 的即时编译 JIT。
JVM 垃圾回收器主要有 4 种:
Serial 串行垃圾回收器:只有一个线程执行垃圾回收。
Parallel 并行垃圾回收器:启动多线程进行垃圾回收。
CMS 并发垃圾回收器:垃圾回收线程和用户线程并发运行。
G1 垃圾回收器:将整个堆空间分成多个子区域,然后在这些子区域上各自独立进行垃圾回收,在回收过程中垃圾回收线程和用户线程也是并发运行。
在串行和并行垃圾回收过程中,当垃圾回收线程工作的时候,必须要停止用户线程的工作,否则可能会导致对象的引用标记错乱,因此垃圾回收过程也被称为 stop the world,在用户视角看来,所有的程序都不再执行,整个世界都停止了。
G1 综合了以前几种垃圾回收器的优势,适用场景更多。
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/56befa914be0e46cb6416648c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论