01-25-javajvm-JVM和Java体系架构

news2024/7/6 21:10:55

01-java-JVM和Java体系架构:

1、jvm底层,对性能调优,java是动态内存分配

2、java的跨平台性:
Java虚拟机关心“字节码”文件,Java虚拟机和语言关性,只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,它就是一个有效的字节码文件,就能够被虚拟机所识别并装载运行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8URV21xh-1669901014102)(png/image-20211009173931444.png)]

3、字节码:java字节码指用编译后的class字节码文件。能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。
Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式——Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他辅助信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pBpPlPSM-1669901014104)(png/image-20211009174052949.png)]

4、虚拟接和java虚拟机

所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。虚拟机可以分为系统虚拟机和程序虚拟机。

大名鼎鼎的Virtual Box,VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。
程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。
无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。

java虚拟机:特点:一次编辑到处运行,内存自动管理,垃圾自动回收

​ Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。
​ JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回器,以及可靠的即时编译器。
​ Java技术的核心就是Java虚拟机(JVM,Java Virtual Machine),所有的Java程序都运行在Java虚拟机内部。
​ Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。

jvm的位置:JVM是运行在操作系统之上的,它与硬件没有直接的交互

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPpEVwrL-1669901014105)(png/image-20211015161155674.png)]

Java的体系结构

  • 执行引擎(高级语言翻译成机器语言)包含三部分:解释器,即时编译器,垃圾回收器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-816tWy1u-1669901014106)(png/image-20211015161709684.png)]

在这里插入图片描述

在这里插入图片描述

Java代码执行流程
在这里插入图片描述

JVM架构模型
Java编译器输入的指令流:

1、基于栈的指令集架构
1)、设计和实现更简单,适用于资源受限的系统
2)、避开了寄存器的分配难题:使用零地址指令方式分配(零地址,栈,入栈出栈,不需要地址记录,只操作当前)
3)、指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现
4)、不需要硬件支持,可移植性更好,更好实现跨平台
2、基于寄存器的指令集架构(了解)。
1)、典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
2)、指令集架构则完全依赖硬件,与硬件的耦合度高,可移植性差
3)、性能优秀和执行更高效
4)、花费更少的指令去完成一项操作
5)、在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主

两种架构的举例:

同样执行2+3这种逻辑操作,其指令分别如下:

基于栈的计算流程(以Java虚拟机为例)

iconst_2 	//常量2入栈
istore_1	//记录常量2的地址1
iconst_3 	// 常量3入栈
istore_2	//记录常量2的地址2
iload_1		//加载常量1
iload_2		//加载常量2
iadd 		//常量2/3出栈,执行相加
istore_0 	// 结果5入栈
基于寄存器的计算流程
mov eax,2 //将eax寄存器的值设为1
add eax,3 //使eax寄存器的值加3

self测试

public class StackStruTest {
    public static void main(String[] args) {
        int i=2;
        int j=3;
        int k=i+j;
    }
}

反编译字节码文件

在这里插入图片描述

总结 栈:跨平台性、指令集小、指令多;执行性能比寄存器差

JVM虚拟机历史了解:

HotSpot VM

  • HotSpot历史

    • 最初由一家名为“Longview Technologies”的小公司设计
    • 1997年,此公司被sun收购;2009年,Sun公司被甲骨文收购。
    • JDK1.3时,HotSpot VM成为默认虚拟机
  • 目前Hotspot占有绝对的市场地位,称霸武林。

    • 不管是现在仍在广泛使用的JDK6,还是使用比例较多的JDK8中,默认的虚拟机都是HotSpot
    • Sun / Oracle JDK 和 OpenJDK 的默认虚拟机
    • 因此本课程中默认介绍的虚拟机都是HotSpot,相关机制也主要是指HotSpot的Gc机制。(比如其他两个商用虚机都没有方法区的概念)
  • 从服务器、桌面到移动端、嵌入式都有应用。

  • 名称中的HotSpot指的就是它的热点代码探测技术。

    • 通过计数器找到最具编译价值代码,触发即时编译或栈上替换
    • 通过编译器与解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡

其他虚拟机有(了解):Sun Classic VM,Exact VM,JRockit,IBM的J9,KVM和CDC / CLDC Hotspot,Azul VM,Liquid VM,Apache Harmony,Micorsoft JVM,Taobao JVM,Dalvik VM,Graal VM

其他虚拟机有(了解):Sun Classic VM,Exact VM,JRockit,IBM的J9,KVM和CDC / CLDC Hotspot,Azul VM,Liquid VM,Apache Harmony,Micorsoft JVM,Taobao JVM,Dalvik VM,Graal VM

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ch55xduino

1.把wch的ch55x系列单片机,移植到Arduino,制成所谓的“ch55xduino”:GitHub - DeqingSun/ch55xduino: An Arduino-like programming API for the CH55X 2.ch55x系列单片机比较(立创/云汉2022年12月报价) (1)CH552T:2…

ECMAScript新特性

代码 ECMAScript概述 ECMAScript 是脚本语言的标准化规范,也就是语言的语法。比如:怎样定义变量、怎样定义函数和逻辑运算等等。 那么ECMAScript 和 JavaScript 是何关系? JavaScript 是ECMAScript 的扩展语言,JavaScript实现了…

项目管理逻辑:日志\周报\月报, 一直要求写, 有用吗?

目录 1.公司管控项目: 2.什么是项目的生命周期? 3.项目管控举例 3.1装修项目阶段划分 3.2研发项目 4.控制项目的核心 1.公司管控项目: 写周报,日报,项目问题照样失控, 其实本质上的问题就是 我们没有如何设置好项目的阶段和项目的里程碑. 项目管理的五个阶段 2.什么是…

Golang基本命令操作

在前两期【初探Golang语言之环境搭建】 和 【Golang语法总结与学习】,对环境搭建和基本语法有介绍,本篇对常用的命令进行学习和梳理,记录下来,方便备查。 一、Go 语言基本命令 // 编译,生成exe文件 go build // 移除…

家庭用户无线上网案例(AC通过三层口对AP进行管理)

组网需求 为一个家庭用户使用的网络架构。该家庭消费用户的上网流量大多是低速流量,例如浏览网页、玩游戏、看视频等。家庭成员使用的无线终端主要为手机、PC、电视机等。终端接入的数量正常情况下在10个以内,偶尔有家庭聚会等特殊情况,终端接…

微服务框架 SpringCloud微服务架构 11 自定义镜像 11.1 镜像结构

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构11 自定义镜像11.1 镜像结构11.1.1 镜像结构11.1.2 总结11 自定义镜像 11…

【人工智能与机器学习】——线性回归、逻辑回归与分类评价指标(学习笔记)

📖 前言:线性回归(Lincar Regression)模型是最简单的线性模型之一,简而言之就像一元一次函数,是所有机器学习初学者的起点。而逻辑回归(Logistic Regression)则稍显复杂,…

微服务架构

单体架构 优点: 1:部署简单: 由于是完整的结构体,可以直接部署在一个服务器上即可。 2:技术单一: 项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发。 3:用人成本低: 单个程序员可以完成业务接口…

k8s之Pod控制器详解

文章目录一、Pod控制器介绍1、什么是Pod控制器1.2、ReplicaSet(RS)1.3、Deployment(Deploy)1.3.1、重建更新1.3.2、滚动更新1.3.2、版本回退1.3.3、金丝雀发布1.4、Horizontal Pod Autoscaler(HPA)1.5、DaemonSet(DS)1.6、Job1.7、CronJob(CJ)一、Pod控制器介绍 Pod是kubernet…

c语言结构体看这篇文章就够啦(详细介绍结构体)

前言: c语言两大重要点,一个是指针,另一个就是结构体啦,这篇文章我将全面的介绍一下结构体,和他的使用,相信大家看完这篇以后定能对结构体有个深入的理解,并且会正确的使用它。 💞 &…

智工教育:注册计量师一级和二级的科目一样吗?

注册计量师有二级、一级之分,其中二级考试所涉及的科目为《计量法律法规及综合知识》《计量专业实务与案例分析》,必须要在连续2年内考过,否则就要重新报考。 而一级的考试科目,则分别是《计量法律法规及综合知识》、《测量数据处…

H2/H∞半车悬架控制仿真分析

目录 前言 1.悬架模型 2.LMI求解 3.simulink仿真分析 3.1结论 前言 对于H2/H∞控制的鲁棒项相比不用多说,之前也写过两篇关于1/4车的H2/H∞控制文章,链接如下: 基于LMI的车辆主动悬架控制_Mr. 邹的博客-CSDN博客 基于MATLAB/Simulink的…

01-redis篇 两种数据储存持久化方式

目录 1. 背景: 2. 两种数据持久化方式 2.1 RDB存储机制 -> (1) 配置docker版redis -> (2) rdb默认开启, 配置如下 redis.conf 打开 ->(3)安全退出的模式 ->(4) save与bgsave 2.2 AOF持久化机制 ->(1) 修改redis.conf 开启aof储存机制 ->(2) 为什么要…

ahooks解决React闭包问题方法示例

这篇文章主要为大家介绍了ahooks解决React闭包问题方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 引言 本文是深入浅出 ahooks 源码系列文章的第三篇,这个系列的目标主要有…

ShardingSphere介绍

ShardingSphere产品介绍 Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。 设计哲学为 Database Plus,旨在构建异构数据库上层的标准…

项目管理逻辑:为什么职能部门官僚主义气息浓重?

目录 1.管理孤岛 2.业务部门和职能部门之间的关系 3.企业如何转型升级 3.1垂直管理模式 3.2精细管理模式 4.成熟企业的职能部门和组织部门 1.管理孤岛 职能部门办事状态 每个公司通常从管理的角度会划分很多个层级 . 不同层级之间通常会存在管理隔阂,也就是说不同的领…

HCIA笔记(2)

一、地址(全球唯一、地址统一) 1.MAC地址:芯片出厂时,厂家烧录进去的一个串号。48位二进制构成 2.物理地址:C8-CB-9E-6B-3A-41 --- 为了方便人类区分和识别,我们会将48位二进制转换为12位16进制表示 3.查…

logging java日志选择

文章目录hutoolsslf4japache logging[JDK logging](https://www.liaoxuefeng.com/wiki/1252599548343744/1264738568571776)logbacklog4j2hutools <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>…

一种在 Python 中实现更快 OpenCV 视频流的多线程方法

概述在本文中&#xff0c;我们将看到两个没有多线程的 Python 代码示例&#xff0c;用于从摄像头读取视频帧。我们将看到使用/不使用多线程获得的 FPS 的差异。什么是多线程&#xff1f;线程是进程中的一个执行单元。多线程是指通过在线程之间快速切换对 CPU 的控制&#xff08…

257.二叉树的所有路径

257.二叉树的所有路径 文章目录257.二叉树的所有路径题目题解技巧 - 参数的作用域巧妙的题解方法题目 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&a…