JVM基础入门

JVM基础入门

Java跨平台语言

        Java是一门跨平台语言,所谓跨平台,就是Java源文件会被编译成为字节码文件(.class文件),不管是Windows,Linux还是Mac,都有其适配的JVM,也就是字节码文件可以随意在这些JVM上去运行。

Write once,run anywhere.

        其他的语言,例如c语言,编译成为机器码之后,由于底层的机器语言支持不一样,编译后的机器语言文件是不可以跨操作系统运行的。而Java则是把兼容的工作交给了JVM。不同的JVM负责去适配不同的操作系统。

        所有的Java虚拟机都遵守java虚拟机的规范,语言编写者不需要考虑兼容问题。

JVM跨语言的平台

        JVM是跨语言的平台,很多语言都可以编译成为遵守规范的字节码,这些字节码都可以在Java虚拟机上运行。Java虚拟机不关心这个字节码是不是来自于Java程序,只需要各个语言提供自己的编译器,字节码遵循字节码规范,比如字节码的开头是CAFE BABY。

何为字节码?

        字节码狭义上是java语言编译而成,但是由于JVM是支持多种语言编译的字节码的,而字节码都是一个标准规范,因为我们应该称其为JVM字节码。不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同操作系统上的不同JVM中运行。因此,Java虚拟机实际上和Java语言并非强制关联的关系,只和二级制文件(Class文件)强关联

where is JVM?

java从编码到执行

编译:通过 javac 将源码文件(.java文件)编译成JVM可以解释的class文件(.class文件)。

加载:将编译后的class文件由 ClassLoader 加载到JVM中,还会加载一些需要的java类库。

解释:把字节码转换为操作系统可识别的指令。在解释阶段会有两种方式把字节码信息解释成机器指令码,一个是字节码解释器、一个是即时编译器(JIT)

        JVM会对热点代码做编译,非热点代码直接进行解释。当JVM发现某个方法或代码块运行特别频繁时,就有可能把这部分代码认定为热点代码。使用热点探测来检测是否为热点代码。热点探测一般有两种方式,计数器和抽样HotSpot使用的是计数器的方式进行探测,为每个方法准备了两类计数器:方法调用计数器和回边计数器。这两个计数器都有一个确定的阈值,当计数器超过阈值溢出了,就会触发JIT编译。即时编译器把热点方法的指令码保存起来,下次执行的时候就无需重复的进行一句一句的解释执行,直接执行缓存的机器语言,效率会高很多。

执行:解释后交给执行引擎,最后由执行引擎交给操作系统供其调用 。

jvm是一种规范

java virtual machine specifications详细信息可以查阅下面文档:

JDK 13 Documentation - Home。 不同版本有不同文档,此文档是Java13版本的文档。

Java SE Specifications

Java虚拟机是抽象的计算机。 像真正的计算机一样,它具有指令集并在运行时操作各种内存区域。 使用虚拟机实现编程语言是相当普遍的。

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值