博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM介绍
阅读量:5977 次
发布时间:2019-06-20

本文共 1685 字,大约阅读时间需要 5 分钟。

hot3.png

什么是JVM

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

JRE/JDK/JVM的关系

    JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户只需要运行已开发好的java程序,安装JRE即可。

    JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整 性,在JDK的安装过程中,JRE也是 安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。

    JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是 通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重 要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。

JVM原理

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

    Java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。

105558_Od4g_734885.jpg

JVM执行过程

105748_iZ3G_734885.jpg

    如图,java源文件会被java编译器编译成字节码文件,然后由类加载器class loader加载各个类的字节码文件。加载完毕后,由JVN执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。因此,在Java中我们常常说到的内存管理就是针对这段空间进行管理。

JVM的生命周期

    1、JVM实例对应了一个独立运行的java程序它是进程级别

    a) 启动。启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void
main(String[] args)函数的class都可以作为JVM实例运行的起点
    b) 运行。main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以表明自己创建的线程是守护线程
    c) 消亡。当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出

    2、JVM执行引擎实例则对应了属于用户运行程序的线程它是线程级别的

JVM体系结构

142605_aU6F_734885.png

  • 类加载器(ClassLoader):将每一个已编译好的.class文件加载到JVM中,并且每一个被加载到JVM中的class文件都有一个java.lang.Class实例与之相对应。

  • 执行引擎:解析JVM字节码指令,得到运行结果。执行引擎也就是执行一条条代码的一个流程,而代码是包含在方法体内的,所以执行引擎本质就是执行一个个方法所串起来的流程,对应到OS中一个执行流程就是一个Java线程,即每个Java线程就是一个执行引擎的实例。

  • 内存空间:由虚拟机进行内存管理

转载于:https://my.oschina.net/u/734885/blog/632016

你可能感兴趣的文章
key可以重复的map集合:IdentityHashMap
查看>>
Data Member 的存取
查看>>
【转】Backbone标准例子——通讯录
查看>>
Java操作XML文件 dom4j 篇【转】
查看>>
Markdown学习测试.md
查看>>
Recurrent Neural Network系列2--利用Python,Theano实现RNN
查看>>
用微信小程序开发的Canvas绘制可配置的转盘抽奖
查看>>
回调函数、Java接口回调 总结
查看>>
PHP MySql数据库访问
查看>>
Windows配置jdk环境变量JAVA_HOME与path
查看>>
Api管理工具(spring-rest-docs)
查看>>
【评论】一个老程序员的建议
查看>>
网民关注iPhone、Google、微软和安全
查看>>
Python——基础篇
查看>>
一起谈.NET技术,C#创建不规则窗体的几种方式
查看>>
微软拟对Office 2007增添新功能 增强安全性
查看>>
一起谈.NET技术,初识Silverlight 4及其架构
查看>>
艾伟_转载:ASP.NET模板引擎技术
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务(十三)断路器聚合监控(Hystrix Turbine)...
查看>>
Mysql 用法
查看>>