JVM 入门

JVM

JVM (Java Virtual Machine),Java 虚拟机,我们的 Java 代码需编译为 .class 字节码文件,经过 JVM 来执行。JVM 是 JAVA 语言的运行环境。

JVM 垮平台

Java 的垮平台,其实是 JVM 的跨平台。
在这里插入图片描述

Java 之所以可以垮平台执行,其实是因为在不同的平台上都有对应版本的 JVM 可以执行 Java 编译之后的字节码

执行其他语言的代码

如今的 JVM 其实可以不止执行 Java 代码,任何语言,只要编译为 JVM 支持的字节码,就可以使用 JVM 来执行。
在这里插入图片描述

每种语言的编译器可能不一样,但只要编译成 JVM 支持的字节码文件,即可使用 JVM 。

JDK、JRE、JVM

在这里插入图片描述

上图为 Java 8 的官方文档中的图片,其清晰的表达了JDK、JRE、JVM 之间的包含关系。

各种 Java 虚拟机

  • HotSpot:目前 Java 虚拟机中绝对的老大。我们安装的 Jdk 应该都是默认使用 HotSpot VM。最初为一个小公司开发,被 sun 收购,sun 又被 Oracle 收购。从 Jdk 1.3 就开始称霸武林。
  • BEA JRockit:JRockit 虚拟机是 BEA 公司于 2002 年从 Appeal Virtual Machines 收购获得的虚拟机
  • IBM J9:J9 虚拟机是 IBM 公司单独开发的高性能虚拟机,它并不独立出售,而是作为 IBM 公司各种产品的执行平台,IBM 把它定义为一个可以适应从嵌入式设备到大型企业级应用的、高可移植性的Java运行平台。
  • 其他:其他还有很多如:Sun Classic(Jdk 1.0 时代的虚拟机)、Sun Exact (HotSpot 的孪生兄弟,Jdk 1.2 被短暂使用)

查看我们本地的虚拟机版本

在这里插入图片描述

HotSpot 的整体架构

在这里插入图片描述

  • 类的加载子系统(Class Loader Subsystem):类加载器子系统负责从文件系统或者网络加载 class 文件,class 文件在文件开头有特定的文件标识。ClassLoader 只负责class 文件的加载,至于它是否可以运行,则由执行引擎决定。
  • 运行时数据区(Runtime Data Area):运行时数据区包括:程序计数器(PC寄存器)、Java虚拟机栈、堆、方法区、本地方法栈等等。其中方法区和堆是多线程共享的,其余程序计数器、本地方法栈、Java 虚拟机栈是每个线程独有的。
  • 执行引擎(Execution Engine):执行引擎包含解释器(Interpreter)、JIT 即时编译器 (JUST IN TIME Complier)、垃圾回收器
  • 本地方法接口(Native Method Interface):用于调用非 Java 代码的接囗,如 Java 调用 C 语言函数。在 Java API 中有很多 native 关键字修饰的方法,其没有实现,其就是本地方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值