JVM的位置以及JVM的整体结构

JVM的位置以及JVM的整体结构

JVM的位置:

在这里插入图片描述
JVM是运行在操作系统上的, 它与硬件没有直接的交互(与硬件直接交互的是操作系统)

  • JVM也是应用软件, 是运行在操作系统上的, 当然, 操作系统也是软件

JDK(Java开发工具包)与JRE(Java运行时环境)与JVM(Java虚拟机)之间的关系图:

在这里插入图片描述

JDK可以分为Java编译运行等相关工具和JRE, JRE又可以分为Java类库和JVM, 而在Java编译运行工具中我们学习到过一个编译工具是javac, 其实javac是一个前端编译器, 负责将.java文件(java源代码),编译为.class文件, 而在JVM(此时指的是现在使用最多的HotSpot VM)中又有JIT(是一款后端编译器, 是及时编译器, 编译过程属于动态编译), JIT编译器的作用是将.class文件编译为对应操作系统上的机器指令

注意: 我们的JVM中(我们一般不指明的情况下都是说的当前最火热的HotSpot VM)不一定对于.class文件就要编译执行, 也可以是通过解释器执行, 现在大多数JVM中都是采用了解释器 + 编译器的构造, 为了提高响应速度, 所以当我们点击运行的时候, 这个时候我们的解释器会立马解释执行, 而我们的编译器则会针对热点代码进行一个编译, 将其编译为对应操作系统的机器指令(注意: 编译为什么操作系统的机器指令不是由本机操作系统决定的, 而是由JVM决定的), 之后将对应编译后得到的机器指令存储到方法区中, 这样对于编译器编译后的代码, 当我们第二次执行的时候就不用解释执行, 而是直接通过对应的机器指令执行即可, 所以说编译后的代码执行的效率相比解释执行是快很多的

虽然编译执行效率高, 但是编译也有编译的坏处, JVM一般不会选择只搭建编译器,原因如下:
1. 编译固然效率高,但是如果只有编译器, 那么程序启动将会变得比较慢, 也就是会降低启动响应速度
2. 编译后产生的机器指令要放到方法区中, 而编译后产生的机器指令的大小会是class字节码文件大小的10倍左右, 所有会有很大一部分的空间开销

但是很多服务器上的JVM中都采用的是只有编译器的架构, 因为服务器一般都是部署项目需要的是程序启动之后的效率, 反倒是对于程序启动的时间没有太多的追求

补充:

安卓系统(Android)也是基于Linux内核的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值