JVM学习总结:字节码篇

本文是学习尚硅谷宋红康老师主讲的 尚硅谷JVM精讲与GC调优教程 的总结 ,部分内容也参考了 JavaGuide 网站(文末有链接)

JVM 概述

  • Oracle JDK 与 OpenJDK 是什么关系?

    2006 年 SUN 公司将 Java 开源,也就有了 OpenJDK。2009 年 Oracle 收购了 Sun 公司,于是在 OpenJDK 的基础上搞了一个 Oracle JDK。

    • OpenJDK 网站:https://openjdk.org/projects/jdk/ ,仓库地址:https://github.com/openjdk/jdk/。Oracle JDK 网站:https://www.oracle.com/java/technologies/downloads/。
    • OpenJDK 是完全开源且免费的。Oracle JDK 不是完全开源的,会提供免费版本,但一般有时间限制。
    • 功能性上两者基本一致。
    • OpenJDK 根据 GPL v2 协议获得许可,Oracle JDK 使用 BCL/OTN 协议获得许可。
  • JDK、JRE、JVM 是什么关系?

    JRE 包括 JVM 和 Java 基础类库,JDK 不仅包含 JRE,还包括编译器 javac 和其他工具,如 javadoc(文档生成器)、jdb(调试器)、jconsole(监控工具)、javap(反编译工具) 等。

    不过,从 JDK 9 开始,就不需要区分 JDK 和 JRE 的关系了,取而代之的是模块系统和 jlink 工具。

  • 常见的 JVM 有哪些?

    HotSpot、JRockit、J9

  • JIT 是什么?
    JIT 是 Just In Time 的缩写,JVM 将字节码文件转换为机器码时,JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。后面引进了 JIT 编译器,当 JIT 编译器完成第一次编译后,将字节码文件中的热点代码对应的机器码保存下来,下次可以直接使用。

  • JVM 架构图
    在这里插入图片描述

    在这里插入图片描述

字节码文件概述

  • 生成 class 文件的编译器有哪些?

    也叫前端编译器,有javac、ECJ(Eclipse Compiler for Java,是一种增量式编译器)、ajc(AspectJ编译器)。

  • javac 编译器的编译步骤有哪些?

    词法分析、语法分析、语义分析、生成字节码。

  • 如何解读 class 文件?

    • 查看二进制工具:Notepad++ 安装 HEX-Editor 插件,或者 Binary Viewer软件。

    • 使用 Oracle 官方的反解析工具 javap

      javap -v xxx.class
      
    • 使用IDEA插件:jclasslib 或 jclasslib bytecode viewer 客户端工具。

class 文件结构

  • class 文件结果有哪几部分?

    • 魔鬼数字: 0xCAFEBABE
    • class 文件版本
    • 常量池
    • 访问标识
    • 类索引、父类索引、接口索引集合
    • 字段表集合
    • 方法表集合
    • 属性表集合

    官网文档:https://docs.oracle.com/javase/specs/jvms/se23/html/jvms-4.html

    在这里插入图片描述

  • JDK 1.1 对应的 class 文件版本是 45 ,后面版本依次加 1 。虚拟机JDK版本为1.k (k >= 2)时,对应的class文件格式版本号的范围为45 - 44 + k 。

  • 常量池

    常量池存放所有常量。常量池表项中,用于存放编译时期生成的各种

    • 字面量
      • 文本字符串
      • 声明为 final 的常量值
    • 符号引用
      • 类和接口的全限定名
      • 字段的名称和描述符
      • 方法的名称和描述符

字节码指令

Java 虚拟机的指令由一个字节长度的操作码和操作数构成,指令集的操作码总数不超过 256 条。

官方文档: https://docs.oracle.com/javase/specs/jvms/se23/html/jvms-6.html

JVM 中字节码的指令集按用途大致分为 9 类:

  • 加载与存储指令,如 xload、xstore等
  • 算术指令,如 iadd、isub 等
  • 类型转换指令,如 i2l、l2f 等
  • 对象的创建与访问指令,如 new、 getstatic、getfield 等
  • 方法调用与返回指令,如 invokevirtual、ireturn 等
  • 操作数栈管理指令,如 pop、dup 等
  • 控制转移指令,如 ifeq、iflt 等
  • 异常处理指令,如 athrow
  • 同步控制指令,如 monitorenter、monitorexit

Java 虚拟机还有一个只在内部使用的基本类型:returnAddress ,Java 程序员不能使用这个类型,这个基本类型被用来实现 Java 程序中的 finally 子句。该类型是 jsr、ret 以及 jsr_w 指令需要使用到的,它的值是 JVM 指令的操作码指针。 returnAddress 类型不是简单意义的数值,不属于任何一种基本类型,并且它的值是不能被运行中的程序所修改的。

参考

  • 尚硅谷JVM精讲与GC调优教程 (宋红康主讲) (https://www.bilibili.com/video/BV1Dz4y1A7FB?spm_id_from=333.788.videopod.episodes&vd_source=9266b9af652d5902d068c94b9d60116f)
    M精讲与GC调优教程 (宋红康主讲) (https://www.bilibili.com/video/BV1Dz4y1A7FB?spm_id_from=333.788.videopod.episodes&vd_source=9266b9af652d5902d068c94b9d60116f)
  • JavaGuide网站 (https://javaguide.cn/java/basis/java-basic-questions-01.html)

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

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

相关文章

Games202作业5(完结)

单帧降噪 也就是针对图像空间进行降噪 也就是我们需要在像素(i,j)的四周进行采样,然后将采样的权重加到一起,然后所有的权重和像素的乘积也加到一起,然后相除,得到最终滤波后的(i,j)像素期望的结果。 Buf…

P4可编程技术详解:从理论到硬件实现

P4的诞生 为打破传统的固定封装模式,充分解放数据平面的编程能力,Nick McKeown领导的斯坦福大学研究团队于2014年提出可编程处理语言P4。借助P4的数据平面编程能力,用户可在网卡、交换机、路由器等网络设备上实现包括VXLAN、MPLS等在内的各种…

电影评论网站开发:Spring Boot技术指南

3系统分析 3.1可行性分析 通过对本电影评论网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本电影评论网站采用SSM框架,JAVA作为开发语言&#…

Linux文件的查找和打包以及压缩

文件的查找 文件查找的用处,在我们需要文件但却又不知道文件在哪里的时候 文件查找存在着三种类型的查找 1、which或whereis:查找命令的程序文件位置 2、locate:也是一种文件查找,但是基于数据库的查找 3、find:针…

基于SpringBoot+Vue+uniapp微信小程序的社区门诊管理系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

01 设计模式-创造型模式-工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的方式,使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 通过使用工厂模式…

1.2.3 TCP IP模型

TCP/IP模型(接网叔用) 网络接口层 网络层 传输层 应用层 理念:如果某些应用需要“数据格式转换”“会话管理功能”,就交给应用层的特定协议去实现 tip:数据 局部正确不等于全局正确 但是,数据的 全局正…

数码准备记录

1.数据结构 常见的数据结构包括数组、链表、栈、队列、树(如二叉树、B树、B树)、图等 2.队列和栈的区别 队列是一种先入先出的数据结构,即最先加入的元素被最先移除; 栈是一种后进后出的数据结构,即最后加入的元素…

RTMP协议分析

理论 总体介绍 RTMP协议是应⽤层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建⽴完成后,RTMP协议也要客户端和服务器通过“握⼿”来建⽴基于传输层链接之上的RTMP Connection链…

Collection 单列集合 List Set

集合概念 集合是一种特殊类 ,这些类可以存储任意类对象,并且长度可变, 这些集合类都位于java.util中,使用的话必须导包 按照存储结构可以分为两大类 单列集合 Collection 双列集合 Map 两种 区别如下 Collection 单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两…

Electron-(二)桌面应用的启动动画创建

一、概述 在很多桌面应用中都会有启动画面的显示。启动画面可以解决在启动时耗时较长,将每一步反馈给用户。另外一方面解决启动过程中的环境检查及检查结果的反馈。 在当今的桌面应用领域,启动动画已成为提升用户体验的重要组成部分。它不仅仅是一个简单…

【Linux】main函数的参数列表从何而来?

Linux系统进程通过exec系列函数启动新程序时,argc整型 、 argv数组 和 环境变量表 environ 会作为 exec 系列函数的参数,显式传递给新程序的 main 函数。 main函数的参数列表 在C语言中,main函数的标准参数列表通常如下所示: in…

极客wordpress模板

这是一个展示WordPress主题的网页设计。页面顶部有一个导航栏,包含多个选项,如“关于我们”、“产品中心”、“案例展示”、“新闻动态”、“联系我们”和“技术支持”。页面中间部分展示了多个产品,每个产品都有一个图片和简短的描述。页面下…

MySQL【知识改变命运】06

前言:在05这节数据结构里面,我们知道select * from 这个操作很危险,如果数据库很大,会把服务器资源耗尽,接下来提到的查询可以有效的限制返回记录 1:分页查询 分页查询可以有效控制一次查询出来的结果集的…

【CTF刷题9】2024.10.19

[MoeCTF 2021]babyRCE 考点&#xff1a;关键词过滤&#xff08;绕过方法参考往期博客&#xff09; 来源&#xff1a;nssctf <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\&g…

图像中的数值计算

目录 图像读取与形状图像数据展示图像数据操作超出范围的像素值处理 图像读取与形状 使用cv2.imread函数读取图像文件。图像的形状通过shape属性获取&#xff0c;格式为(高度, 宽度, 颜色通道数)。 import cv2img1 cv2.imread(bg.jpg) img2 cv2.imread(fish.jpg)print(img1…

Linux服务器安装SRAToolkit教程

SRAToolkit是由NCBI&#xff08;美国国家生物技术信息中心&#xff09;提供的一个工具集&#xff0c;用于下载、读取和转换SRA&#xff08;Sequence Read Archive&#xff09;格式的数据文件。这些数据文件包含了大规模的核酸序列数据&#xff0c;对于基因组学研究至关重要。本…

pytorch激活函数介绍

在 PyTorch 中,激活函数(Activation Functions)是神经网络中重要的非线性组件,用于引入非线性,使网络能够学习复杂的函数关系。以下是 PyTorch 中常见的激活函数及其特点: 1. ReLU (Rectified Linear Unit) 函数: torch.nn.ReLU()公式: ReLU(x)=max⁡(0,x)特点: 常用于隐…

python-代码技巧

python-代码技巧 简单tips1、多个列表循环遍历2、使用map对列表中多个文件进行批量操作 仅个人笔记使用&#xff0c;感谢点赞关注 简单tips 1、多个列表循环遍历 dataTypes ["train","test"] dataStations ["1","2","3"…

【C语言】自定义类型:结构体--结构体内存对齐(用于计算结构体的大小)

结构体内存对齐 结构体内存对齐用于计算结构体的大小。 &#xff08;1&#xff09;对齐规则 1&#xff09;&#xff09;结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的地址处。 2&#xff09;&#xff09;其他成员变量要对齐到某个数字&#xff08;对齐数&#…