当前位置:网站首页>尚硅谷JVM-第一章 类加载子系统
尚硅谷JVM-第一章 类加载子系统
2022-07-06 19:33:00 【一只懒惰的小虫子】
1、虚拟机介绍
所谓虚拟机(Virtual Machine),就是一台
虚拟的计算机
。它是一款软件
,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机
和程序虚拟机
。
- 大名鼎鼎的Virtual Box,VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。
- 程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。
- 无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。
2、Java虚拟机
- Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。
- JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回器,以及可靠的即时编译器。
- Java技术的核心就是Java虚拟机(JVM,Java Virtual Machine),因为所有的Java程序都运行在Java虚拟机内部。
- Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。
3、JVM的整体结构
HotSpot VM
是目前市面上高性能虚拟机的代表作之一。- 它采用解释器与即时编译器并存的架构。
- 在今天,Java程序的运行性能早已脱胎换骨,已经达到了可以和C/C++程序一较高下的地步。
- 执行引擎包含三部分:
解释器
,即时编译器
,垃圾回收器
4、JVM架构模型
Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。具体来说:这两种架构之间的区别:
基于栈式架构的特点
- 设计和实现更简单,适用于资源受限的系统
- 避开了寄存器的分配难题:使用零地址指令方式分配
- 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现
- 不需要硬件支持,可移植性更好,更好实现跨平台
基于寄存器架构的特点
- 典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
- 指令集架构则完全依赖硬件,与硬件的耦合度高,可移植性差
- 性能优秀和执行更高效
- 花费更少的指令去完成一项操作
- 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主
5、总结
- 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令
- 时至今日,尽管嵌入式平台已经不是Java程序的主流运行平台了(准确来说应该是HotSpot VM的宿主环境已经不局限于嵌入式平台了),那么为什么不将架构更换为基于寄存器的架构呢?
- 因为基于栈的架构跨平台性好、指令集小,虽然相对于基于寄存器的架构来说,基于栈的架构编译得到的指令更多,执行性能也不如基于寄存器的架构好,但考虑到其跨平台性与移植性,我们还是选用栈的架构
边栏推荐
- Left path cloud recursion + dynamic planning
- [secretly kill little partner pytorch20 days] - [Day1] - [example of structured data modeling process]
- Niuke programming problem -- double pointer of 101 must be brushed
- 电气工程及其自动化
- Utilisation de la promesse dans es6
- Cloud Mail .NET Edition
- MMDetection3D加载毫米波雷达数据
- 【Socket】①Socket技术概述
- Hash table and full comments
- QT常见概念-1
猜你喜欢
随机推荐
掘金量化:通过history方法获取数据,和新浪财经,雪球同用等比复权因子。不同于同花顺
运维管理系统有哪些特色
Wireshark installation
centerX: 用中国特色社会主义的方式打开centernet
How to design interface test cases? Teach you a few tips to draft easily
QT Bluetooth: qbluetooth DeviceInfo
Redis introduction complete tutorial: replication principle
Django database (SQLite) basic introductory tutorial
Left path cloud recursion + dynamic planning
IDEA重启后无法创建Servlet文件的解决方案
Metaforce force meta universe fossage 2.0 smart contract system development (source code deployment)
MySQL
Detailed explanation of 19 dimensional integrated navigation module sinsgps in psins (filtering part)
Qpushbutton- "function refinement"
Data analysis from the perspective of control theory
The annual salary of general test is 15W, and the annual salary of test and development is 30w+. What is the difference between the two?
Hash table and full comments
Form validation of uniapp
[node learning notes] the chokidar module realizes file monitoring
[socket] ① overview of socket technology