虚拟机的组成:程序计数器,虚拟机栈,本地方法栈,堆,方法区。
程序计数器:它是虚拟机的很小的一个内存,它是一个线程私有的,它记录了当前执行的那一行的java代码对应的字节码的行数。
虚拟机栈:它是一个线程私有的。当一个线程创建的时候,这个线程对应的虚拟机栈也创建了。当这个线程死亡的时候,它对应的虚拟机栈也死亡了。
本地方法栈:本地方法栈和虚拟机栈的功能基本上是类似的。它们的区别是,虚拟机栈是为虚拟机提供字节码服务,本地方法栈是为虚拟机提供本地方法服务。
堆:它是java虚拟机管理的内存中最大的一块。所有的线程共享堆。几乎所有的对象的实例都放在这里。在虚拟机启动的时候,创建。
方法区:它和堆一样,都是被所有的线程共享的。它存储的是已经被jvm加载的所有的类的信息,静态变量,常量,即时编译器编译完成的代码等等数据。