当前位置: 首页 > news >正文

JVM与Java体系结构

一、前言:

Java语言和JVM简介:

Java是目前最为广泛的软件开发平台之一。

JVM:跨语言的平台

随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。 Java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,它只关心“字节码”文件。也就是说Java虚拟机拥有语言无关性,并不会单纯地与Java语言“终身绑定”,只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,它就是一个有效的字节码文件,就能够被虚拟机所识别并装载运行。

字节码:

Java字节码指的是用java语言编译成的字节码,准确的说任何能在jvm平台上执行的字节码格式都是一样的,所以应该统称为jvm字节码。不同的编译器可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。Java虚拟机与Java语言并没有必然的联系,至于特定的二进制文件——Class文件格式有所关联。Class文件中包含了Java虚拟机指令集和符号表,还有一些其他的辅助信息

虚拟机与JVM介绍:

所谓虚拟机就是一台虚拟的计算机,它是一款软件,用来执行一系列虚拟计算机指令。大体上虚拟计算机可以分为系统虚拟机程序虚拟机程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令成为Java字节码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。

Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。JVM平台的各种语言可以共享Java虚拟机带来的跨平台性。优秀的垃圾回收器以及可靠的即时编译器。Java技术的核心就是Java虚拟机,因为所有的Java程序都运行在Java虚拟机内部。

Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,例如怎么去操作数、怎么处理操作数以及处理结果放在哪里等。特点包括一次编译、到处运行、自动管理内存以及自动垃圾回收功能

JVM的位置:

JVM整体结构:

HotSpot VM是市面上高性能虚拟机的代表作之一,它采用解释器与即时编译器并存的架构

Java代码的执行流程:

JVM的架构模型:

Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。

两种架构之间的区别:

1.基于栈式架构的特点:

(1).设计和实现更简单,适用于资源受限的系统;

(2).避开了寄存器的分配难题:使用零地址指令方式分配。

(3).指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。

(4).不需要硬件支持,可移植性更好,更好实现跨平台

2.基于寄存器架构的特点:

(1).典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。

(2).指令集架构则完全依赖硬件,可移植性差

(3).性能优秀和执行更高效;

(4).花费更少的指令去完成一项操作。

(5).在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令vin和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主。

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

JVM的生命周期:

1.虚拟机的启动:

Java虚拟机的启动时通过引导类加载器创建的一个初始类来完成的,这个类是由虚拟机的具体实现指定的

2.虚拟机的执行

(1).一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序

(2).程序开始执行时才运行,程序结束时才停止

(3).执行一个所谓的Java程序时,真正在执行的是一个叫做Java虚拟机的进程

3.虚拟机的退出:

有以下的几种情况Java虚拟机会退出:

(1).程序正常结束

(2).程序在执行过程中遇到了异常或错误导致异常终止

(3).由于操作系统出现错误而导致Java虚拟机进程终止

(4).某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法并且Java安全管理器也允许这次exit或halt操作

(5).除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时Java虚拟机的退出情况

JVM的发展历程:

1.Sun Classic VM:

早在1996年Java1.0版本的时候,sun公司发布了一款名为Sunclassic VM的Java虚拟机,它同时也是世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰;

这款虚拟机内部只提供解释器;

如果使用JIT编译器,就需要进行外挂。但是一旦使用了JIT编译器,JIT就会接管虚拟机的执行系统。解释器就不再工作。解释器和编译器不能配合工作;

现在hotspot内置了此虚拟机

2.Exact VM:

Exact Memory Management:准确式内存管理,也可以叫做Non-Conservative/Accurate Memory Management;虚拟机可以知道内存中某个位置的数据具体是什么类型

具备现代高性能虚拟机的雏形:热点探测、编译器与解释器混合工作模式

只在solaris平台短暂使用,其他平台上还是classic vm

3.HotSpot VM:

不管是现在仍在广泛使用的JDK6,还是使用比例较多的JDK8中默认的虚拟机都是Hotspot

Sun/oracle JDK和OpenJDK的默认虚拟机

通过计数器找到最具编译价值代码,触发即时编译或栈上替换

通过编译器与解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡

相关文章:

JVM与Java体系结构

一、前言: Java语言和JVM简介: Java是目前最为广泛的软件开发平台之一。 JVM:跨语言的平台 随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。 Java虚拟机根本不关心运行在其内部的程序到底是使用何…...

网络授时笔记

SNTP的全称是Simple Network Time Protocol,意思是简单网络时间协议,用来从网络中获取当前的时间,也可以称为网络授时。项目中会使用LwIP SNTP模块从服务器(pool.ntp.org)获取时间 我们使用sntp例程,sntp例程路径为D:\Espressif\…...

【CSS】HTML页面定位CSS - position 属性 relative 、absolute、fixed 、sticky

目录 relative 相对定位 absolute 绝对定位 fixed 固定定位 sticky 粘性定位 position:relative 、absolute、fixed 、sticky (四选一) top:距离上面的像素 bottom:距离底部的像素 left:距离左边的像素…...

spark汇总

目录 描述运行模式1. Windows模式代码示例 2. Local模式3. Standalone模式 RDD描述特性RDD创建代码示例(并行化创建)代码示例(读取外部数据)代码示例(读取目录下的所有文件) 算子DAGSparkSQLSparkStreaming…...

【Rust自学】11.5. 在测试中使用Result<T, E>

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.5.1. 测试函数返回值为Result枚举 到目前为止,测试运行失败的原因都是因为触发了panic,但可以导致测试失败的…...

Sping Boot教程之五十四:Spring Boot Kafka 生产者示例

Spring Boot Kafka 生产者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架,使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可…...

设计模式-结构型-组合模式

1. 什么是组合模式? 组合模式(Composite Pattern) 是一种结构型设计模式,它允许将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。换句话说,组合模式允…...

基于Java的推箱子游戏设计与实现

基于Java的推箱子游戏设计与实现 摘 要 社会在进步,人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。具有…...

Spark vs Flink分布式数据处理框架的全面对比与应用场景解析

1. 引言 1.1 什么是分布式数据处理框架 随着数据量的快速增长,传统的单机处理方式已经无法满足现代数据处理需求。分布式数据处理框架应运而生,它通过将数据分片分布到多台服务器上并行处理,提高了任务的处理速度和效率。 分布式数据处理框…...

python_excel列表单元格字符合并、填充、复制操作

读取指定sheet页,根据规则合并指定列,填充特定字符,删除多余的列,每行复制四次,最后写入新的文件中。 import pandas as pd""" 读取指定sheet页,根据规则合并指定列,填充特定字…...

nums[:]数组切片

问题:给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 使用代码如下没有办法通过测试示例,必须将最后一行代码改成 nums[:]nums[-k:]nums[:-k]切片形式: 原因:列表的切片操作 …...

【Arthas 】Can not find Arthas under local: /root/.arthas/lib 解决办法

报错 [INFO] JAVA_HOME: /opt/java/openjdk [INFO] arthas-boot version: 4.0.4 [INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER. [1]: 12 org.springframework.boot.loader.JarLauncher 1 [ER…...

录用率23%!CCF推荐-B类,Early Access即可被SCI数据库收录,中美作者占比过半

International Journal of Human-Computer Interaction(IJHCI)创刊于1989年,由泰勒-弗朗西斯(Taylor & Francis, Inc.)出版,主要发表关于交互式计算(认知和人体工程学)、数字无障…...

IP 地址与蜜罐技术

基于IP的地址的蜜罐技术是一种主动防御策略,它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意,将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描,寻找可入侵的目标时&…...

Vue_API文档

Vue API风格 Vue 的组件可以按两种不同的风格书写:选项式 API(Vue2) 和组合式 API(Vue3) 大部分的核心概念在这两种风格之间都是通用的。熟悉了一种风格以后,你也能够很快地理解另一种风格 选项式API(Opt…...

WebSocket 设计思路

WebSocket 设计思路 1. 核心结构体 1.1 Manager (管理器) // Manager 负责管理所有WebSocket连接 type Manager struct {clients sync.Map // 存储所有客户端连接broadcast chan []byte // 广播消息通道messages chan Message // 消息处理通道config *config.WebSo…...

Jenkins持续集成与交付安装配置

Jenkins 是一款开源的持续集成(CI)和持续交付(CD)工具,它主要用于自动化软件的构建、测试和部署流程。为项目持续集成与交付功能强大的应用。下面我们来介绍下它的安装与配置。 环境准备 更新系统组件(这…...

ESP32作为Wi-Fi AP模式的测试

一、AP模式的流程 初始化阶段 (Init Phase): 1.1: Main task(主任务)初始化LwIP(轻量级TCP/IP协议栈)。 ESP_ERROR_CHECK(esp_netif_init()); 1.2: 创建和初始化Event task(事件任务)。 ESP_ERROR_CHECK…...

【爬虫】单个网站链接爬取文献数据:标题、摘要、作者等信息

源码链接: https://github.com/Niceeggplant/Single—Site-Crawler.git 一、项目概述 从指定网页中提取文章关键信息的工具。通过输入文章的 URL,程序将自动抓取网页内容 二、技术选型与原理 requests 库:这是 Python 中用于发送 HTTP 请求…...

Android RIL(Radio Interface Layer)全面概述和知识要点(3万字长文)

在Android面试时,懂得越多越深android framework的知识,越为自己加分。 目录 第一章:RIL 概述 1.1 RIL 的定义与作用 1.2 RIL 的发展历程 1.3 RIL 与 Android 系统的关系 第二章:RIL 的架构与工作原理 2.1 RIL 的架构组成 2.2 RIL 的工作原理 2.3 RIL 的接口与协议…...

leetcode_2816. 翻倍以链表形式表示的数字

2816. 翻倍以链表形式表示的数字 - 力扣(LeetCode) 搜先看到这个题目 链表的节点那么多 已经远超longlong能够表示的范围 那么暴力解题 肯定是不可以的了 我们可以想到 乘法运算中 就是从低位到高位进行计算 刚开始 我想先反转链表 然后在计算 然后在进…...

【论文阅读】MAMBA系列学习

Mamba code:state-spaces/mamba: Mamba SSM architecture paper:https://arxiv.org/abs/2312.00752 背景 研究问题:如何在保持线性时间复杂度的同时,提升序列建模的性能,特别是在处理长序列和密集数据(如…...

MySQL教程之:批量使用mysql

在前几节中&#xff0c;您以交互方式使用mysql输入语句并查看结果。您也可以运行mysql批量模式。为此&#xff0c;请将要运行的语句放在文件中&#xff0c;然后告诉mysql从文件中读取其输入&#xff1a; $> mysql < batch-file 如果您在Windows下运行mysql&#xff0c;…...

17_Redis管道技术

Redis管道(Pipeline)技术是一种在 Redis 客户端与服务器之间进行高效数据交互的技术。 1.Redis管道技术介绍 1.1 传统请求响应模式 在传统的请求-响应模式下,客户端每发送一个命令后会等待服务器返回结果,然后再发送下一个命令。这种方式在网络延迟较高的情况下会导致性…...

【LC】3270. 求出数字答案

题目描述&#xff1a; 给你三个 正 整数 num1 &#xff0c;num2 和 num3 。 数字 num1 &#xff0c;num2 和 num3 的数字答案 key 是一个四位数&#xff0c;定义如下&#xff1a; 一开始&#xff0c;如果有数字 少于 四位数&#xff0c;给它补 前导 0 。答案 key 的第 i 个数…...

【redis】ubuntu18安装redis7

在Ubuntu 18下安装Redis7可以通过以下两种方法实现&#xff1a;手动编译安装和使用APT进行安装。 Ubuntu 18系统的环境和版本&#xff1a; $ cat /proc/version Linux version 4.15.0-213-generic (builddlcy02-amd64-079) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)…...

d2j-dex2jar classes.dex 执行报错:not support version 问题解决

这个错误是由于 dex2jar 工具不支持你的 classes.dex 文件的版本导致的。通常情况下&#xff0c;这是因为你尝试使用的 dex2jar 版本不支持 Android 较新的 DEX 文件格式&#xff08;例如 DEX 格式 038 或更新版本&#xff09;。 解决方法 以下是一些解决此问题的步骤&#x…...

智慧城市应急指挥中心系统平台建设方案

建设背景与目标 智慧城市应急指挥中心系统平台的建设&#xff0c;源于对城市管理精细化、智能化的迫切需求。平台旨在通过整合各方资源&#xff0c;实现应急事件的快速响应与高效处置&#xff0c;提升城市安全管理水平。 前端设计与信息采集 前端设计注重立体化、全方位信息…...

QT鼠标、键盘事件

一、鼠标 鼠标点击 mousePressEvent 鼠标释放 mouseReleaseEvent 鼠标移动 mouseMoveEvent 鼠标双击 mouseDoubleClickEvent 鼠标滚轮 QWheelEvent 二、键盘 键盘按下 keyPressEvent 键盘松开keyReleaseEvent 一、鼠标 #include <QMouseEvent> 鼠标点击 mouse…...

Ceph分布式存储集群,不仅仅是一个简单的对象存储解决方案

Ceph 作为 OpenStack 的存储后端 块存储&#xff08;Cinder 后端&#xff09; Ceph 的 RBD&#xff08;RADOS Block Device&#xff09;模块作为 OpenStack Cinder 服务的后端&#xff0c;为虚拟机提供块级别的存储资源。RBD 支持快照、克隆和恢复等功能&#xff0c;能够满足虚…...

开网络公司做网站挣钱吗/贵阳seo网站推广

一、路由 uni-app页面路由为框架统一管理&#xff0c;需要在pages.json里配置每个路由页面的路径和页面样式。类似的小程序在app.json中配置页面路由相同 页面栈 框架以栈的形式管理当前所有页面&#xff0c;当发生路由切换的时候&#xff0c;页面栈的表现如下&#xff1a; …...

重庆潼南网站建设价格/太原seo全网营销

Riak是Basho开发的一个开源的分布式的 key-valueNoSQL.他的存储引擎使用了google的levelDb,所以它性能极其的快速高效,而且操作简便. 他从底层上提供了HTTP/JSON的查询接口,这让性能更进一步.现在只对使用PHP操作riak的get,put做一个简单的实例:$conn new \Riak\Connection(&q…...

怎么用二维动画做网站首页步骤/爱站网怎么用

在MySQL服务器出现短暂(5~30秒)的性能波动的时候&#xff0c;一般的性能监控工具都很难抓住故障现场&#xff0c;也就很难收集对应较细粒度的诊断信息。另外&#xff0c;如果这种波动出现的频率很低&#xff0c;例如几天才一次&#xff0c;我们也很难人为的抓住现场&#xff0c…...

婚纱网站排行/免费seo优化工具

题意&#xff1a;给个矩阵&#xff0c;矩阵里有一些人和房子&#xff08;人数和房子数相等&#xff09;&#xff0c;一个人只进一个房子&#xff08;可以路过房子而不进&#xff09;&#xff0c;每走一步花费1美金&#xff0c;求所有人都进入房子的最小花费&#xff0c;这是典型…...

网站实现步骤及方法/seo去哪里学

路由交换实验 第一篇&#xff1a;实验&#xff1a;通过console口访问交换机 第二篇&#xff1a;实验&#xff1a;通过Telnet访问路由器转载于:https://www.cnblogs.com/madsnotes/p/7095119.html...

百浪科技做网站怎么样/互联网十大企业

摘要&#xff1a;信息技术高度发达的今天,新闻业已经在互联网行业中占越发主导地位。而我们的生活也跟新闻息息相关&#xff0c;尤其是在高度发达的精神文化社会&#xff0c;人们对于电影的喜爱也越来越热衷&#xff0c;但想挑到自己喜爱的片子&#xff0c;就需要影评网站来筛选…...