Java Virtual Mechine,是一种用于计算设备的规范,它是一个虚拟出来的计算机,通过在实际计算机上仿真模拟各种计算机功能来实现的。引入JVM后,java语言在任何平台上运行不需要重新编译。Java语言使用JVM屏蔽了与具体平台相关的信息,使得java源编译程序只需生成在java虚拟机上运行的目标代码,就可以在多种平台上不加修改的运行。

一般的高级语言,要在不同的平台上运行,需要编译成不同的目标代码。JVM在执行字节码时,把字节码译成具体平台上的具体指令执行。

 

JVM有自己完善的硬件架构。如处理器,堆栈等,还有相应的指令系统。

JVM本质上就是一个程序,当它在命令行启动时,就开始执行保存在某字节码文件中的指令。

每个java程序都离不开JVM,java程序的运行依靠具体的java虚拟机实例。在JVM中,分别用了子系统,内存区,数据类型以及指令这几个术语来描述。这些组成部分一起展示出一个抽象化的虚拟机内部的抽象体系结构。

JVM主要分为五大模块:

类装载器子系统,运行时数据区,执行引擎,本地方法接口和垃圾收集模块。

大多数JVM实现都是有垃圾收集的。而运行时数据区都是以某种形式存在于每一个java虚拟机实例中。JVM不是真实的物理机它没有寄存器,所以指令是使用java栈来存储中间数据。

JVM是基于堆栈的虚拟机,JVM为每一个新创建的线程分配一个堆栈。堆栈是操作系统在建立某个进程或者线程时,为其建立的存储区域,该区域具有先进后出的特点。每一个java应用都唯一对应JVM实例,每个实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并有应用所有线程共享。java中所有对象的存储空间都是在堆中分配的,但这个对象的引用是在栈中分配的。

 

 堆内存用来存储由new新建的对象和数组。由GC来管理。

栈中存放基本类型或引用类型的变量。

JVM只有一个堆区被所有线程共享,每个线程包含一个栈区,每个栈中的数据都是私有的,其他栈不能访问。

方法区又称静态区,跟堆一样,被所有线程共享,方法区中包含的永远都是整个过程中永远唯一的元素,如class,static变量。

posted on 2020-04-21 16:25  gqqi  阅读(158)  评论(0编辑  收藏  举报