JVM模型

根据《JAVA虚拟机规范》,JVM模型一般分为4大部分,如下图:JVM模型

1、类加载器(ClassLoader)

         在JVM启动或运行时加载需要的class文件到JVM中;下图表示从java源文件到JVM的整个过程:

JVM模型

2、内存区(也叫运行时数据区)

         JVM运行的时候所分配的区域,内存区可以划分为以下几个部分:

         a、方法区

                  用于存放类结构等信息的地方,主要包括常量池、静态变量、构造函数等;

         b、Java栈

                  Java栈总是与线程关联在一起,每创建一个线程时,就会为这个线程创建一个对应的java栈,每运行一个方法就会创建一个栈帧,用于存放对应的局部变量、操作栈和方法返回值等。每一个方法从调用到完成的过程,就对应一个栈帧在Java栈中的入栈与出栈的过程;所有Java栈是线程所私有的;

         c、Java堆

                  存储Java实例和对象的地方;这里是GC的主要运作区域;Java栈和Java堆都是被所有线程共享的;

                  GC的两种算法:引用计数法、可达性算法;

         d、本地线程栈

                  和Java栈的作用差不都,只不过是为了JVM调用本地方法服务的;

         e、程序计数器

                  用于保存当前线程执行的内存地址;由于JVM是多线程的(多个线程轮流切换),为了保证线程切换回来后,还能恢复到原先状态,就需要一个独立的计数器,来记录之前中断的地方,因此程序计数器也是线程私有的;

3、执行引擎

         执行class文件中的字节码指令;

4、本地库

         主要调用C或者C++实现的本地方法及返回结果;