02-有哪些常见的JVM?请说下Java代码的运行机制

1.JVM虚拟机介绍
虚拟机概念:
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
在这里插入图片描述
虚拟机分类

Linux虚拟机

一种安装在Windows上的虚拟linux操作环境,就被称为linux虚拟机。它实际上只是个文件而已,是虚拟的linux环境,而非真正意义上的操作系统。但是它们的实际效果是一样的。所以安装在虚拟机上使用好。常用安装虚拟机软件有:vmware、VirtualBox等。

Java虚拟机

Java虚拟机(JVM)是Java Virtual Machine的缩写,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。
**Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

一句话就是:一次编译,到处运行,并且具备自动内存管理+自动垃圾回收功能**

总结

Java虚拟机是Java语言底层实现的基础,对Java语言感兴趣的人都应对Java虚拟机有个大概的了解。这有助于理解Java语言的一些性质,也有助于使用Java语言。对于要在特定平台上实现Java虚拟机的软件人员,Java语言的编译器作者以及要用硬件芯片实现Java虚拟机的人来说,则必须深刻理解Java虚拟机的规范。另外,如果想扩展Java语言,或是把其它语言编译成Java语言的字节码,也需要深入地了解Java虚拟机。
2.常见的JVM 大家可以百度搜一下,更新的也不算快
在这里插入图片描述

【其他两款特殊虚拟机介绍】(可以简单了解一下

Sun Classic VM介绍:

早在1996年Java1.0版本的时候,SUN公司就发布了一款名为SUN Classic VM的Java 虚拟机,同时也是世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰。这款虚拟机内部只提供解释器,如果使用JIT编译器,就需要进行外挂。但是一旦使用了JIT编译器,JIT就会接管虚拟机的执行系统,解释器就不再工作。解释器和编译器不能配合工作。

现在hotspot已经内置了此虚拟机。

Dalvik VM:

谷歌开发的应用于Android系统的虚拟机,并在Android2.2中提供了JIT,发展迅猛。

Dalvik VM 并不能直接执行Java的Class文件,因为其并没有遵循Java虚拟机的规范,它是基于寄存器结构而不是jvm的栈架构,因此其执行的是编译以后的dex(Dalvik Executable)文件【可以通过Class文件进行转化】,执行效率较高。

Android5.0使用了支持提前编译(Ahead of Time Compilation,AOT)的ART VM替换Dalvik VM。

我们的学习路线图就通过从一个类的加载开始,来学习Java是如何将代码运行起来的,由点到面的方式,一步一步深入理解JVM的整体运行机制。
在这里插入图片描述
3.Java代码的运行机制
我们平时写的Java代码,到底是如何运行起来的?

我们都知道,我们平时创建的一个一个类,在本地磁盘中的文件名后缀就是 .java,比如User.java 、Product.java ,这也叫做源代码文件。

这些源代码文件必须经历我们的javac工具进行编译后生成 .class 的字节码文件才能被运行。
在这里插入图片描述
那接着我们就要继续思考了:那这些 .class 字节码文件又是如何运行起来的?
此时一旦采用 java 命令,实际上就是启动了一个JVM进程,由JVM来负责加载这些字节码文件到内存进行执行。
而将class字节码文件加载到虚拟机的内存,这个过程称为类加载,其中涉及到 【类加载机制】和【类加载器】的概念。
当字节码文件被类加载器加载进入到JVM内存中后,会通过JVM的执行引擎来执行我们内存中对应的类,比如类中的main方法,就会先被执行,而main方法中如果还涉及到其他的对象引用,类加载又会开始加载对应的字节码文件到内存,再由JVM进行调用执行。(如下图)
在这里插入图片描述
ok,通过以上的分析,我们可以先整体对java代码的运行流程做了一个全面的介绍,接下来再深入分析类加载器又是如何执行的,一步一步深入学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习一直在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值