Java虚拟机Java Virtual Machine(JVM)总结

1、什么是JVM

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

1.1、JVM原理

JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。

1.2、JVM虚拟机结构

     

  • 程序计数器:指向当前线程正在执行的字节码指令的地址。
  • 虚拟机栈:存储当前线程运行方法所需要的数据、指令、返回地址。虚拟机

虚拟机栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址。

  • 本地方法栈:JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。
  • 方法区:类的信息、常量,静态变量,JIT(动态代理)。
  • 堆(Heap):它是JVM用来存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC进行回收。

         堆的划分(划分):新生代{  Eden、Survivor0(S0)、Survivor1(S1)}、老年代、元空间。

         元空间(Metaspace):元空间取代了1.7版本及以前的永久代。元空间和永久代本质上都是方法区的实现。方法区存放虚拟机加载的类信息,静态变量,常量等数据。元空间是可扩容的类似ArryList集合

为什么要将堆分成这么多个模块,是为了提高空间利用率,便于GC垃圾回收。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章