JVM初识-----01章

一.虚拟机与java虚拟机的区别以及共同点

  1.虚拟机(Virtual Machine,简称VM)

是一种能够在物理计算机上模拟一台完整的计算机系统的软件。它运行在宿主操作系统之上,可以提供一个独立的运行环境,使得在不同的操作系统上运行相同的应用程序成为可能。

   2.Java虚拟机(Java Virtual Machine,简称JVM)

是一种特殊的虚拟机,它可以解释和执行Java字节码,使得开发者能够将Java程序跨平台地运行在不同的操作系统上。JVM是Java语言的核心,它负责执行Java程序的运行时环境,包括内存管理、垃圾回收等。

  3.虚拟机和Java虚拟机的共同点

是它们都是运行在宿主操作系统之上的软件,提供独立的运行环境。它们都可以模拟一台完整的计算机系统,并执行相应的应用程序。虚拟机和Java虚拟机都具有跨平台的特性,可以在不同的操作系统上运行相同的应用程序。同时,它们都提供了一些额外的功能和服务,比如内存管理、垃圾回收等。

  4.虚拟机和Java虚拟机的区别

在于它们的用途和执行的代码类型。虚拟机可以执行各种不同的代码,包括但不限于Java字节码,而Java虚拟机只能解释和执行Java字节码。此外,虚拟机还可以模拟多个操作系统和硬件平台,而Java虚拟机则主要用于运行Java程序。

二.JVM的位置 

三.java代码执行流程

  1. 代码编写:首先,我们需要编写Java代码。Java代码通常保存在以.java为文件后缀的文件中。

  2. 编译:接下来,我们需要将Java代码编译为字节码。字节码是一种中间代码,不直接运行在计算机上,而是在Java虚拟机(JVM)上运行。编译器将Java代码转换为字节码,并生成以.class为文件后缀的文件。

  3. 类加载:Java虚拟机(JVM)会将字节码加载到内存中。它会根据需要动态加载和链接类。这个过程通常是自动的,无需我们手动干预。

  4. 执行:一旦类被加载到内存中,JVM会执行其中的代码。JVM会逐条解释字节码指令,并执行相应的操作。在执行过程中,JVM会管理内存、处理异常等。

  5. 运行结果:Java代码的运行结果将根据代码逻辑和输入数据进行计算,并输出结果。结果可以在控制台上打印,保存到文件中,或者通过网络传输给其他程序。

  6. 结束:Java程序在完成所有代码的执行后,将结束运行。JVM会回收内存等资源,并将程序的退出状态返回给操作系统。

四.JVM的架构模型

 1.栈的指令集架构

是一种计算机体系结构,其中计算机的指令集被设计为操作数栈上的操作。栈是一种数据结构,具有先进后出的特点,类似于一堆盘子的堆叠。在栈的指令集架构中,计算操作数和结果都是直接在栈上进行的。

栈指令集架构与传统的寄存器指令集架构相比,有以下特点:

  1. 操作数的获取和结果的存储:栈指令集架构使用栈来存储操作数和结果。在执行指令时,操作数从栈中弹出,操作完成后,结果再次压入栈中。

  2. 操作数的顺序:栈指令集架构中,操作数的顺序与操作顺序是一致的。例如,对于加法操作,栈指令集架构将首先弹出两个操作数,执行加法操作,然后将结果压入栈中。因此,操作数的顺序是先进后出。

  3. 指令的简洁性:相对于寄存器指令集架构,栈指令集架构通常需要更少的指令来完成相同的操作。这是因为栈指令集架构利用了操作数的顺序,不需要明确指定寄存器来存储和操作数据。

  4. 存储器的使用:栈指令集架构通常需要更少的存储器来存储指令和数据。这是因为栈指令集架构中的指令和数据都存储在栈中,而不需要额外的寄存器来存储。

   2.寄存器架构

是一种计算机体系结构,其中指令操作数直接存储在寄存器中,而不是存储在内存中。这种架构被广泛应用于现代计算机系统中的中央处理器(CPU)。

在基于寄存器架构的系统中,CPU使用一组寄存器来存储临时数据和操作数。这些寄存器是与CPU紧密集成的内部存储器单元。指令操作数首先从内存加载到寄存器中,然后在寄存器中进行算术运算和逻辑操作。最后,结果可以存储回内存或复制到其他寄存器中。

基于寄存器架构的系统具有以下特点:

  1. 高速访问:由于寄存器位于CPU内部,它们的访问速度比访问内存要快得多。这大大提高了指令的执行速度。

  2. 数据传递效率高:由于操作数存储在寄存器中,指令可以直接对寄存器进行操作,而不需要通过内存进行传递。这消除了内存访问的延迟,提高了数据传递效率。

  3. 简化指令格式:由于操作数直接存储在寄存器中,指令格式可以更加简洁。指令只需指定要操作的寄存器和操作类型即可。

  4. 减少存储器带宽需求:由于操作数存储在寄存器中,而不是存储在内存中,寄存器架构可以减少对存储器带宽的需求。这使得更多的带宽可以用于其他任务,提高了系统的整体性能。

   3.为什么选择栈的指令集架构模型

      在Java虚拟机中选择栈的指令集架构模型而不选择寄存器的模型架构有几个原因:

  1. 简单性:栈指令集架构模型相对于寄存器模型来说更简单。栈架构不需要考虑寄存器的分配和管理,使得虚拟机的实现更加容易。

  2. 跨平台性:栈指令集架构模型是一种中间形式,不依赖于具体的硬件平台。这使得Java虚拟机可以在不同的操作系统和硬件上运行,具有更好的跨平台性。

  3. 安全性:由于栈指令集架构模型不直接访问寄存器,它更容易实现安全性控制。Java虚拟机可以在运行时进行访问权限检查,确保程序的安全性。

  4. 垃圾回收:栈指令集架构模型利于垃圾回收的实现。栈帧可以更容易地进行分配和回收,减少了垃圾回收的复杂性和开销。

  5. 尽管栈指令集架构模型相对于寄存器模型来说在某些方面有一定的限制,但在Java虚拟机中更适合,因为它更简单、更跨平台、更安全,并且有利于垃圾回收的实现。这使得Java虚拟机能够在各种不同的环境中高效地运行Java程序。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/225077.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue实现响应式布局

前提准备:响应式布局有两种方法,看自己想要哪种。 方法一:百分比 用百分比去写元素的宽度,然后让子元素撑起父元素的高度 .parent {width: 50%; }.child {width:100%;height:100px; } 方法二:vh、vw vw、vh是基于视…

如何使用kali来进行一次ddos攻击

本文章用于记录自己的学习路线,不用于其他任何途径! ! ! 哈喽啊!又是好久不见,本博主在之前发过一个ddos攻击的介绍。 emm…虽然那篇文章也提到了ddos攻击的方式,但太过于简陋,好像也没有什么用,so&#…

Docker实用篇

文章目录 Docker实用篇0.学习目标1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结 1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.小结 1.4.安…

mac电脑系统性能检测:Geekbench 6最新 for mac

Geekbench 6是一款跨平台的性能测试软件,旨在全面衡量电脑在不同任务和应用程序中的性能。它适用于Windows、macOS、Linux等操作系统,以及移动设备如Android和iOS。 Geekbench 6主要特点包括: 全面覆盖各种性能测试领域,包括CPU…

构建外卖系统:从技术到实战

在当今高度数字化的社会中,外卖系统的开发变得愈发重要。本文将从技术角度出发,带领读者一步步构建一个基础的外卖系统,并涵盖关键技术和实际代码。 1. 技术选型 1.1 后端开发 选择Node.js和Express框架进行后端开发,搭建一个灵…

ModuleNotFoundError: No module named ‘tensorflow‘

直接运行pip install tensorflow安装成功之后,发现版本是tensorflow2.15.0 python的版本是3.9版本 导入包:import tensorflow 打包xxx.exe,调用之后提示错误 ModuleNotFoundError: No module named tensorflow 最后发现特定的python的版本对应特定的t…

ioDraw AI:思维导图、流程图、序列图、类图、饼图,一应俱全

前言 在信息爆炸的时代,我们每天接收着大量的信息,如何高效地整理和呈现这些信息成为了一项重要的挑战。思维导图作为一种可视化思维工具,能够帮助我们快速构建和整理复杂的信息结构,便于我们理解和记忆。ioDraw AI绘图工具正是基…

【集合】Vector与CopyOnWriteArrayList

前言: 此篇博客着重于:在多线程并发执行读、写操作的场景下,Vector集合、CopyOnWriteArrayList集合是否能保证线程安全?它们是通过什么方式保证线程安全的? Vector: (1)add(E e)方法…

Android笔记(二十一):Room组件实现Android应用的持久化处理

一、Room组件概述 Room是Android JetPack架构组件之一,是一个持久处理的库。Room提供了在SQLite数据库上提供抽象层,使之实现数据访问。 (1)实体类(Entity):映射并封装了数据库对应的数据表中…

【力扣】199.二叉树的右视图

看到这个题目的一瞬间,我想递归,必须用递归。最近被递归折磨的有点狠,但是我感觉我快要打败它了,就是现在稍稍有点处于劣势。不过没关系,来日方长不是。 法一:递归 题解: 之前想的就是先递归&…

漏洞复现-泛微OA xmlrpcServlet接口任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

Vue 封装echarts柱状图(Bar)组件

目的&#xff1a;减少重复代码&#xff0c;便于维护 显示效果 组件代码 <template><div class"ldw-data-content-box"><div class"ldw-chilren-box"><div class"title" v-if"title">{{ title }}</div>…

聊聊CLI:一个比NPS更全面、客观的体验指标

说起NPS&#xff08;Net Promoter Score&#xff0c;净推荐值&#xff09;大家一定不会感到陌生&#xff0c;它被誉为客户体验管理&#xff08;CEM&#xff09;领域的黄金指标&#xff0c;以“衡量客户忠诚度”而受到大家的认可和追捧。 然而&#xff0c;随着时间的推移和各行业…

Day72力扣打卡

打卡记录 参加考试的最大学生数&#xff08;压缩状态DP&#xff09; 链接 class Solution:def maxStudents(self, seats: List[List[str]]) -> int:m, n len(seats), len(seats[0])# a[i] 是第 i 排可用椅子的下标集合a [sum((c .) << j for j, c in enumerate(s…

C++学习实践(一)高频面试问题总结(附详细答案)

文章目录 一、基础常见面试题1、数组和链表区别2、深拷贝和浅拷贝相关问题的区别3、a和a区别4、c内存模型5、四种强制转换和应用场景 二、指针相关1、指针和引用的区别2、函数指针和指针函数3、传指针、引用和值4、常量指针和指针常量5、野指针6、智能指针的用法 三、关键字作用…

基于5G智能网关的智慧塔吊监测方案

塔吊是建筑施工中必不可少的设施&#xff0c;由于塔吊工作重心高、起重载荷大、人工视距/视角受限等因素&#xff0c;也使得塔吊在工作过程中着较多的危险因素。对此&#xff0c;可以部署基于工业5G智能网关搭建智慧塔吊安全监测系统&#xff0c;实现对塔吊运行的全局精细监测感…

web3风险投资公司之Electric Capital

文章目录 什么是 Electric CapitalElectric团队 Electric Capital 开发者报告参考 什么是 Electric Capital 官网&#xff1a;https://www.electriccapital.com/ 官方github&#xff1a;https://github.com/electric-capital Electric Capital 是一家投资于加密货币、区块链企…

这一次,我准备了 20节 PyTorch 中文课程

对于刚接触深度学习的小白来说&#xff0c;PyTorch 是必会的框架。 只是&#xff0c;很多小伙伴还没来得及开启学习之路&#xff0c;一个最重要的问题就摆在了面前&#xff1a; PyTorch&#xff0c;该怎么学呢&#xff1f; 很多同学会自己在网上找资料&#xff0c;不仅耗费时间…

NET中使用SQLSugar操作sqlserver数据库

目录 一、SqlSugar是什么&#xff1f; 二、迁移和建表 1.建立实体 2.创建上下文类 3.在Program中添加SqlSugar服务 4.在控制器中注入上下文类 三、简单实现CURD功能 总结 一、SqlSugar是什么&#xff1f; SqlSugar是一款老牌 .NET 开源ORM框架。 主要特点&#xff1a…

智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.指数分布算法4.实验参数设定5.算法结果6.…