黑马JVM总结(二十五)
(1)字节码指令-cinit
构造方法可以分为两类,一类是cinit 一类init
cinit是整个类的构造方法

putstatic:进行static变量的赋值,是到常量池里找到名字一个叫做i的变量


(2)字节码指令-init
init是:每个构造对象的构造方法
对成员变量的赋值,初始化代码块,构造方法里面的代码,最终呢也也会收集成同一个方法,会把这些代码最终呢合并在一起



以上呢就是对整个构造方法,关联到成员变量赋值操作,初始化代码块以后的执行的流程
(3)方法的调用
我们来看看不同的方法他们调用的字节码指令是否一样

如果是构造方法调用的是invokespecial 私有也是调用 invokespecial final也是调用的invokespecial 普通的public调用的invokevirtual 两次静态方法调用的invokestatic

public的方法是不能唯一确定的,它可能出现方法重写的情况,因此在编译期间他不能唯一确定它调用的是那个方法,也许是子类的也许是父类的invokevirtual 所以称之为动态绑定,需要在运行的时候确定
在性能上invokespecial 和invokestatic性能更高一些因为他属于静态绑定,将来就能找到方法的执行地址了,invokevirtual需要确定多次才能确定方法的执行地址这是这几个方法调用的指令
pop是静态方法的调用是不需要对象的pop把对象出栈
(4)多态原理-HSDB
invokevirtual是显现方法的多态调用,它的工作方式相对较为复杂,下面研究一下执行流程



使用虚拟机工具可以看到我们虚拟机中比较底层的内存状态和内存地址








(5)多态原理-查找类

查询Dog这个对象:查询出对象在内存中的地址
这个对象呢分了对象头,成员变量,这里质包含了对象头16个字节:前8个字节mark1:包含对象的哈希吗以及后来加锁时的锁标记,后面8个字节是对象的类型指针,根据对象的类型指针可以找到Class类

可以查看这俩内存的实际地址:

对象类型 指针的类型表示:Dog在java虚拟机里的样子,它是处在方法区包含了这个类的所有信息
常量池的指针地址,方法入口的指针地址

(6)多态原理-vtable
下面我们来看类中的方法指那种多态的方法它是存在一种交vtable的虚方法表中,前面提到的静态方法,final方法,私有方法,他们不会列在这个虚方法表中,他在类的结构的中的最后一个

vtable的地址是:028换成1E0

在对象头里可以看到vtable的长度:





虚方法表中最后一个方法的地址就是对应Dog类的eat方法

虚方法表中第三项实际调用父类Animal中的toString方法
Object类:

我们对对象的虚方法表做了一个分析,以后呢通过对象找到Class类,通过Class类知道虚方法表后,我们可以确定每个方法的实际入口地址发现有的来自父类,有的是本类,将来我们就知道一个对象调用方法时到底找的是那个方法,虚方法表是在类的加载过程中的连接阶段就会生成虚方法表,在链接的时候确定了每一个方法的入口地址
(7)多态原理-总结

这个是多态调用时方法的查找过程,这个过程还是比较复杂的,需要查找很多步,从细微的效率上不如:invokespecial 和invokestatic,因为它设计到运行期间动态的对它进行查找,当然JVM也会对这个查找做一个进一步优化,有一个缓存,当反复的调用同一个方法达到次数以后,就会从缓存中找到这个方法的字节码地址,就不用经历这么多的查找步骤了
多态在运行期间虚拟机可以做一个单态的优化,也可以加快方法的取值速度
相关文章:
黑马JVM总结(二十五)
(1)字节码指令-cinit 构造方法可以分为两类,一类是cinit 一类init cinit是整个类的构造方法 putstatic:进行static变量的赋值,是到常量池里找到名字一个叫做i的变量 (2)字节码指令-init in…...
基础数据结构之——【顺序表】(上)
从今天开始更新数据结构的相关内容。(我更新博文的顺序一般是按照我当前的学习进度来安排,学到什么就更新什么(简单来说就是我的学习笔记),所以不会对一个专栏一下子更新到底,哈哈哈哈哈哈哈!&a…...
Apollo自动驾驶系统概述(文末参与活动赠送百度周边)
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄ÿ…...
Java 21 新特性:Unnamed Classes and Instance Main Methods
Java 21引入了两个语言核心功能: 未命名的Java类你说新的启动协议:该协议允许更简单地运行Java类,并且无需太多样板 下面一起来看个例子。通常,我们初学Java的时候,都会写类似下面这样的 Hello World 程序࿱…...
Tomcat启动后的日志输出为乱码
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
CSP-J第二轮试题-2021年-4题
文章目录 参考:总结 [CSP-J 2021] 小熊的果篮题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 样例 #3样例输入 #3样例输出 #3 提示答案答案1答案2答案3 现场真题注意事项 参考: https://www.luogu.com.cn/probl…...
10.1 今日任务:select实现服务器并发
#include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号,范围1024~49151 #define IP "192.168.112.115" //本机IP,ifco…...
P1540 [NOIP2010 提高组] 机器翻译(模拟)
[NOIP2010 提高组] 机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词…...
生信教程:ABBA-BABA分析之滑动窗口
简介 ABBA BABA 统计(也称为 D 统计)为偏离严格的分叉进化历史提供了简单而有力的检验。因此,它们经常用于使用基因组规模的 SNP 数据测试基因渗入。 虽然最初开发用于基因渗入的全基因组测试,但它们也可以应用于较小的窗口&#…...
二分答案(求最大值的最小值||求最小值的最大值)
引入 二分答案要建立在二分查找的基础上,在此之前,要知道二分查找的三个模板 模板一 while(l<r) {int mid(lr)>>1;if(check(mid)) rmid;else lmid1; }模板二 while(l<r) {int midlr1>>1;if(check(mid)) lmid;else rmid-1; }模板三…...
思维模型 周期
本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。周期是一个看似极为简单,但背后却蕴藏着大智慧的模型,了解周期,对于了解王朝更替,数学之美,经济运转等都有帮助。 1 周期的应用 …...
从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 介绍项目/ 需求分析
文章目录 一、消息队列是什么?二、需求分析结构解析功能解析规则解析绑定关系交换机类型消息应答 三、持久化存储四、网络通信提供的API复用TCP连接 五、消息队列概念图 一、消息队列是什么? 消息队列 (Message Queue, MQ)就是将阻塞队列这一数据结构提取…...
Python学习之索引与切片
Python学习之索引与切片 s “0abcdefghijklmnopqrstuvwxyz”,第一个元素‘0’,索引号为0,最后一个元素‘z’,索引号为26 1. s[0]获取索引号为0的元素 2. s[1:3]获取索引号为1的元素,直到但不包括索引号为3的元素。即…...
编程每日一练(多语言实现)基础篇:满足abcd=(ab+cd)^2的数 (增加Go语言实现)
文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现3.4 JavaScript 语言实现3.5 Go 语言实现 一、实例描述 假设 abcd 是一个四位整数,将它分成两段,即 ab 和 cd,使之相加求和后再平方。求满…...
LeetCode 热题 HOT 100:回溯专题
LeetCode 热题 HOT 100:https://leetcode.cn/problem-list/2cktkvj/ 文章目录 17. 电话号码的字母组合22. 括号生成39. 组合总和46. 全排列补充:47. 全排列 II (待优化)78. 子集79. 单词搜索124. 二叉树中的最大路径和200. 岛屿数量437. 路径…...
喝健康白酒 有益生心健康
中国的制酒史源远流长,酒渗透在中华五千年的文化中。酒与烟不同,烟对人体有百害而无一利,而对于酒,若掌握好饮酒的度,对人体有一定的养生作用,所以我们通常会说“戒烟限酒”。 据一些专家研究,…...
动态规划:两个数组的dp问题(C++)
动态规划:两个数组的dp问题 前言两个数组的dp问题1.最长公共子序列(中等)2.不同的子序列(困难)3.通配符匹配(困难)4.正则表达式(困难)5.交错字符串(中等&…...
BASH shell脚本篇2——条件命令
这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令,请参考:BASH shell脚本篇1——基本命令 1. If语句 if语句用于在顺序执行语句的流程中执行条…...
【图论C++】Floyd算法(多源最短路径长 及 完整路径)
>>>竞赛算法 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在算法竞赛学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记ÿ…...
小谈设计模式(11)—模板方法模式
小谈设计模式(11)—模板方法模式 专栏介绍专栏地址专栏介绍 模板方法模式角色分类抽象类(Abstract Class)具体子类(Concrete Class)抽象方法(Abstract Method)具体方法(C…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
