JVM 1:基础知识

2023-05-16

目录

      • 一、JVM从编译到执行
        • 1.Java 程序的执行过程
        • 2.JVM、JRE、JDK 的关系
      • 二、JVM的跨平台与语言无关性
        • 1.跨平台
        • 2.跨语言(语言无关性)
      • 三、JVM 整体知识模块

一、JVM从编译到执行

在这里插入图片描述

1.Java 程序的执行过程

一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在,输入字节码,调用操作系统函数。
过程如下:Java 文件->编译器>字节码->JVM->机器码。
JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。

2.JVM、JRE、JDK 的关系

JVM 只是一个翻译,把 Class 翻译成机器识别的代码,但是需要注意,JVM 不会自己生成代码,需要大家编写代码,同时需要很多依赖类库,这个时候就需要用到 JRE。
JRE 是什么,它除了包含 JVM 之外,提供了很多的类库(就是我们说的 jar 包,它可以提供一些即插即用的功能,比如读取或者操作文件,连接网络,使用 I/O 等等之类的)这些东西就是 JRE 提供的基础类库。JVM 标准加上实现的一大堆基础类库,就组成了 Java 的运行时环境,也就是我们常说的 JRE(Java Runtime Environment)。
但对于程序员来说,JRE 还不够。我写完要编译代码,还需要调试代码,还需要打包代码、有时候还需要反编译代码。所以我们会使用 JDK,因为 JDK还提供了一些非常好用的小工具,比如 javac(编译代码)、java、jar(打包代码)、javap(反编译)等。这个就是 JDK。
具体可以文档可以通过官网去下载:https://www.oracle.com/java/technologies/javase-jdk8-doc-downloads.html
JVM 的作用是:从软件层面屏蔽不同操作系统在底层硬件和指令的不同。这个就是我们在宏观方面对 JVM 的一个认识。
同时 JVM 是一个虚拟化的操作系统,类似于 Linux 或者 Windows 的操作系统,只是它架在操作系统上,接收字节码也就是 class,把字节码翻译成操作系统上的机器码且进行执行。

二、JVM的跨平台与语言无关性

在这里插入图片描述

1.跨平台

我们写的一个类,在不同的操作系统上(Linux、Windows、MacOS 等平台)执行,效果是一样,这个就是 JVM 的跨平台性。
为了实现跨平台型,不同操作系统有对应的 JDK 的版本。
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
在这里插入图片描述

2.跨语言(语言无关性)

JVM 只识别字节码,所以 JVM 其实跟语言是解耦的,也就是没有直接关联,JVM 运行不是翻译 Java 文件,而是识别 class 文件,这个一般称之为字节码。还有像 Groovy 、Kotlin、Scala 等等语言,它们其实也是编译成字节码,所以它们也可以在 JVM 上面跑,这个就是 JVM 的跨语言特征。Java 的跨语言性一定程度上奠定了非常强大的 java 语言生态圈。

三、JVM 整体知识模块

在这里插入图片描述

JVM 能涉及非常庞大的一块知识体系,比如内存结构、垃圾回收、类加载、性能调优、JVM 自身优化技术、执行引擎、类文件结构、监控工具等。但是在所有的知识体系中,都或多或少跟内存结构有一定的关系:
比如垃圾回收回收的就是内存、类加载加载到的地方也是内存、性能优化也涉及到内存优化、执行引擎与内存密不可分、类文件结构与内存的设计有关系,监控工具也会监控内存。所以内存结构处于 JVM 中核心位置。也是属于我们入门 JVM 学习的最好的选择。
同时 JVM 是一个虚拟化的操作系统,所以除了要虚拟指令之外,最重要的一个事情就是需要虚拟化内存,这个虚拟化内存就是 JVM 的内存区域。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM 1:基础知识 的相关文章

  • 01 Trie 专题

    01 Trie 专题 异或最大值 The xor largest pair 题意 xff1a 异或最大值的模板 一个数和一个序列中一个数的异或最大值是多少 xff1f 要支持询问 思路 考虑把序列插入 xff0c 构建一个 Trie tex
  • DFS序专题

    牛客专题之DFS序 简介 dfs序 每个节点在dfs深度优先遍历中的进出栈的时间序列 xff0c 也就是tarjan算法中的dfn数组 画个图理解一下 xff1a 这棵树的dfs序 xff1a 1 3 2 4 2 5 6 7 6 5 1 那
  • 牛客编程巅峰赛S2第4场题解

    牛客编程巅峰赛S2第4场 牛牛摆玩偶 题目描述 牛牛有 n 2 n 1 0
  • Leetcode第 217 场周赛(思维量比较大)

    Leetcode第 217 场周赛 比赛链接 xff1a 点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的 1673 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一个正整数 k xff0c 返回长
  • 牛客巅峰赛S2第6场题解

    牛客编程巅峰赛S2第6场 A String 题目 题目描述 给出一个仅包含小写字母的字符串s xff0c 你最多可以操作k次 xff0c 使得任意一个小写字母变为与其相邻的小写字母 xff08 ASCII码差值的绝对值为1 xff09 xf
  • 2021牛客寒假算法基础集训营1 题解

    2021牛客寒假算法基础集训营1 题解 比赛地址 xff1a https ac nowcoder com acm contest 9981 官方题解 xff1a https ac nowcoder com discuss 593200 A
  • 自监督学习(self-supervised learning)(20201124)

    看论文总是会看出来一堆堆奇奇怪怪的名词 从远程监督 有监督 半监督 无监督开始 xff0c 最近又看到了一个自监督 首先先对上面的概念进行简述 xff1a 半监督 xff08 semi supervised learning xff09 x
  • mynteye_sdk SDK ubuntu20 编译问题

    1 pcl问题 xff1a usr include pcl 1 10 pcl point types h 508 1 error plus is not a member of pcl traits 508 POINT CLOUD REGI
  • 异常抛出**异常捕获**with用法

    1 对于异常处理 xff0c javascript支持异常处理 xff0c 支持手动抛出异常 需要抛出的时候 xff0c 总是通过throw语句抛出Error对象 语法如下 xff1a throw new Error errorString
  • Java IO流 使用流技术将一张图片从一个目录复制到另一个目录

    题目 xff1a 使用流技术将一张图片从F images目录下 xff0c 复制到D images目录下 复制图片需要使用字节流 xff0c 使用字符流复制会将图片字节码格式进行编码 xff0c 可能会导致图片数据丢失 span class
  • 卡尔曼滤波KF

    KF 根据贝叶斯估计的原理 xff0c 卡尔曼滤波是利用已知系统模型的确定性特性和统计特性等先验知识与观测量获得最有估计 xff0c 在有初始值的情况下 xff0c 从先验值和最新观测数据中得到的新值的加权平均来更新状态估计 1 卡尔曼滤波
  • 解决VS2019提示未能加载项目文件。缺少根元素的错误

    解决VS2019提示未能加载项目文件 缺少根元素的错误 上次win10自动更新关掉了打开的vs xff0c 导致开机后再打开解决方案 xff0c 某个项目一直无法加载 xff0c 提示未能加载项目文件 缺少根元素的错误 迁移报告上显示这个项
  • 实验二 串口通信及中断实验

    一 xff0e 实验目的 xff08 1 xff09 熟悉 MCU 的异步串行通信 Uart 的工作原理 xff08 2 xff09 掌握 Uart 的通信编程方法 xff08 3 xff09 掌握中断的编程方法 xff08 4 xff09
  • 多线程编程入门——C++ 「semaphore.h」

    回顾OS xff0c 发现自己基本没有实际操作过多线程编程 xff0c 所以想从今天开始学习 从Leedcode的 1114 按序打印开始 xff1a 信号量类型 sem t 原型 xff1a extern int sem init P s
  • 使用网络调试助手连接EMQ服务器

    一 使用MQTT协议与服务器建立连接 1 在图纸中的位置输入EMQ服务器地址与EMQ服务器的端口 2 接下来我们来看一下MQTT协议中的CONNECT报文 1 固定报头 byte1为0x10 xff0c 表示向服务器端发送的为CONNECT
  • npm下载以来版本问题 npm ERR! code ERESOLVE

    这里就是提示npm的版本太高 xff0c 这个时候 xff0c 需要我们问一下原来开发人员的npm的版本号 xff0c 在进行npm insdtall g npm 64 版本号 安装vue element admin项目问题补充 xff1a
  • 在机器人中执行完的仿真怎么移植到真实机器人上?

    最近在鱼香ROS上看了一篇文章 xff0c 在自己的号上记录一下用以保存 一 搞清楚数据流图 1 1建图 以常见的功能包来说 xff0c 一般都可以在运行的时候生成对应的话题输入与输出 xff0c cmd vel用于控制gazebo中的小车
  • 算法——最长公共子序列(动态规划)

    给定两个字符串 text1 和 text2 xff0c 返回这两个字符串的最长 公共子序列 的长度 如果不存在 公共子序列 xff0c 返回 0 一个字符串的 子序列 是指这样一个新的字符串 xff1a 它是由原字符串在不改变字符的相对顺序
  • VINF_FUSION编译出现大量的error: ‘CV_CALIB_CB_ADAPTIVE_THRESH’ was not declared in this scope错误

    错误 span class token operator span home span class token operator span lee span class token operator span catkin ws span
  • 在线古诗自动生成器的设计与实现

    在线古诗自动生成器的设计与实现 前言一 算法模型介绍LSTM简介模型框架实验环境实验与分析实验数据集数据集预处理训练过程模型训练结果模型的评估 二 在线古诗生成器的设计与实现系统结构远程服务器的项目部署系统测试 三 成品展示 前言 古诗 x

随机推荐

  • S7503E V7 snmpv3典型组网配置案例(与IMC联动)

    转载来源 xff1a S7503E V7 snmpv3典型组网配置案例 xff08 与IMC联动 xff09 https mp weixin qq com s idTHFiRDRRZX9nkd pOSiA 组网及说明 本案例为S7503E
  • OBS Studio录屏软件安装和使用教程

    OBS Studio 全称Open Broadcaster Software Studio 是一个免费的开源的无水印的且不限制时长的视频录制软件 1 首先百度搜索 34 联想软件商店 34 xff0c 单击带有 官方 的即可或直接打开htt
  • MARKDOWN-插入图片

    MARKDOWN 插入图片 1 markdown是什么 Markdown 是一种轻量级标记语言 xff0c 创始人为约翰 格鲁伯 xff08 John Gruber xff09 它允许人们使用易读易写的纯文本格式编写文档 xff0c 然后转
  • xshell6评估期已过,解决方法

    xshell6评估期已过一般因为下载的版本是evaluation 30天评估 版本 xff0c 是有期限的 xff0c 解决如下 xff1a 1 前往下载地址 xff0c 点击免费授权页面 xff1a 2 填写必填信息 xff0c 邮箱一定
  • JetsonNano配置RealSense D435i运行环境

    JetsonNano配置RealSense D435i运行环境 文章目录 JetsonNano配置RealSense D435i运行环境0 前言1 系统环境2 安装ubuntu源自带的SDK问题及解决问题解决方法 xff1a 3 源码编译S
  • LSTM详解

    LSTM详解 文章目录 LSTM详解改进记忆单元门控机制 LSTM结构LSTM的计算过程遗忘门输入门更新记忆单元 输出门LSTM单元的pytorch实现Pytorch中的LSTM参数输入输出 参考与摘录 LSTM是RNN的一种变种 xff0
  • 固定翼无人机结构分类

    一 固定翼无人机常见的气动布局 常规布局 常规布局就是水平尾翼在主翼之后 xff0c 有一个或者两个垂危的气动布局方式 这种布局技术最成熟 xff0c 理论研究已经非常完善 xff0c 生产技术也成熟而稳定 xff0c 同其他气动布局相比各
  • 互联网笔试——服务器启动题

    某厂笔试题 xff0c 居然瞎胡做出来了 xff0c 先把不优雅得答案记录一下 第一行n xff0c p表示有n台机器 xff0c p次操作 第 i 行第一个整数 c 表示第 i 个服务所依赖的服务数量 xff0c 后面 c 个整数表示它所
  • Kubernetes的Secret和ConfigMap实践

    欢迎大家进群 xff0c 一起探讨学习 公众号 博主技术文档地址 博主开源微服架构前后端分离技术博客项目源码地址 xff0c 欢迎各位star 1 Secret Secret解决了密码 token 密钥等敏感数据的配置问题 xff0c 而不
  • 【KAWAKO】TVM-在ubuntu服务器上的安装

    目录 下载源码 安装依赖库 修改config cmake文件 编译 安装python库 添加tophub 简单验证 官方的安装教程在这里 下载源码 从Download Page中下载下来的源码是0 8版本的 xff0c 亲测该版本不可用 x
  • 【Ubuntu 无法使用ifconfig解决办法】

    Ubuntu 无法使用ifconfig解决办法 在使用ubuntu时需要使用ifconfig命令提示 Command span class token char 39 ifconfig 39 span span class token op
  • Jetson tx2刷机指南及gparted扩容全踩坑实录

    这几周试了下jetson tx2刷机 xff0c 出了很多报错 xff0c 特在此记录 本文包括tx2的大概刷机流程 xff0c 以及gparted的扩容方式 前期注意事项 1 如果能直接用ubuntu系统刷 xff0c 请一定不要用虚拟机
  • ROS 下使用codeblocks进行代码快速编辑

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 安装codeblocks二 配置ROS头库路径三 设置codeblocks为默认打开软件效果展示总结 前言 学习ROS
  • Python查看图片模式及像素

    1 以彩色图像为例 xff1a 2 代码 xff1a span class token keyword import span sys span class token keyword from span PIL span class to
  • Python统计RAF-DB数据集中各类情感类别对应的图像数

    一 统计basic部分各类情感类别对应的图像数 1 需要说明的是 xff0c RAD DB数据集对情感的标记是从1开始而非从0开始 xff0c 具体如下 xff1a 1 xff1a Surprise 2 xff1a Fear 3 xff1a
  • Eclipse中查看JAVA源代码显示SOURCE NOT FOUND解决办法

    Eclipse中查看JAVA源码显示SOURCE NOT FOUND解决办法 写代码或者看别人代码的时候总想知道引用函数的内部构造 快捷键Ctrl 43 鼠标左键快捷查看源码 xff0c 不过小白在开始使用的时候一般未关联源码 xff0c
  • QGC地面站环境搭建问题

    1 ubuntu系统环境配置 参照如下博文进行配置 https blog csdn net qq 39751352 article details 125847392 2 ubuntu系统环境 xff0c qt5 12 6 43 qgc环境
  • ros msg文件数组定义与使用

    float32 ranges 注意这里的数组使用的是无长度限制的 xff0c 也就是方扩号内没有东西 在使用的时候 xff0c 不能够直接用数组赋值那样去做 xff0c 它实际上是一个向量 xff0c 往里面填充数据应使用c 43 43 中
  • Git(七)——删除历史版本,保留当前状态

    来自 git删除历史版本 xff0c 保留当前状态 LANGKYE 博客园 1 创建并切换到lastest branch分支 git checkout orphan latest branch 2 添加所有文件 git add A 3 提交
  • JVM 1:基础知识

    目录 一 JVM从编译到执行1 Java 程序的执行过程2 JVM JRE JDK 的关系 二 JVM的跨平台与语言无关性1 跨平台2 跨语言 xff08 语言无关性 xff09 三 JVM 整体知识模块 一 JVM从编译到执行 1 Jav