当前位置:网站首页>尚硅谷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的宿主环境已经不局限于嵌入式平台了),那么为什么不将架构更换为基于寄存器的架构呢?
- 因为基于栈的架构跨平台性好、指令集小,虽然相对于基于寄存器的架构来说,基于栈的架构编译得到的指令更多,执行性能也不如基于寄存器的架构好,但考虑到其跨平台性与移植性,我们还是选用栈的架构
边栏推荐
- Django数据库(SQlite)基本入门使用教程
- 记一次JAP查询导致OOM的问题分析
- HAVE FUN | “飞船计划”活动最新进展
- [socket] ① overview of socket technology
- 从控制理论的角度谈数据分析
- The so-called consumer Internet only matches and connects industry information, and does not change the industry itself
- Redis入门完整教程:客户端案例分析
- Error: could not find a version that satisfies the requirement xxxxx (from versions: none) solutions
- The whole process of knowledge map construction
- How to write test cases for test coupons?
猜你喜欢

Redis introduction complete tutorial: replication principle

电气工程及其自动化

记一次JAP查询导致OOM的问题分析

Error: could not find a version that satisfies the requirement xxxxx (from versions: none) solutions

6-6 vulnerability exploitation SSH security defense

Detailed explanation of 19 dimensional integrated navigation module sinsgps in psins (time synchronization part)

How to analyze fans' interests?

Electrical engineering and automation

MES管理系统的应用和好处有哪些

Redis Getting started tutoriel complet: positionnement et optimisation des problèmes
随机推荐
Django database (SQLite) basic introductory tutorial
2022 spring recruitment begins, and a collection of 10000 word interview questions will help you
巴比特 | 元宇宙每日必读:IP授权是NFT的破圈之路吗?它的难点在哪里?Holder该如何选择合作平台?...
Use of tensorboard
Redis getting started complete tutorial: common exceptions on the client
Kysl Haikang camera 8247 H9 ISAPI test
导数、偏导数、方向导数
A complete tutorial for getting started with redis: AOF persistence
Detailed explanation of 19 dimensional integrated navigation module sinsgps in psins (time synchronization part)
实施MES管理系统时,哪些管理点是需要注意的
QT常见概念-1
centerX: 用中国特色社会主义的方式打开centernet
牛客编程题--必刷101之双指针篇
Redis入门完整教程:复制配置
简单冒泡排序
[socket] ① overview of socket technology
Derivative, partial derivative, directional derivative
How to verify accesstoken in oauth2 protocol
运维管理系统有哪些特色
2022年信息安全工程师考试大纲