黑马JVM总结(六)

2023-09-13 18:24:28

(1)常量池

方法区的组成中都由一个叫做运行时常量池的部分,内部包含一个叫做StringTable的东西

 反编译二进制字节码: 

类的基本信息:

常量池:

方法定义:

构造方法

main方法 :方法中有一些指令,通过指令    #2去常量池中找这个静态指令

常量池:#2它是要找java/lang/System类下的out变量,类型是java/io/PrintStream

 

ldc:

 

invokevirtual  #4:

 

通过常量池总用:就是给我们这些指令提供一些常量符号根据这个常量符号去一查找的方式去找到它

(2)运行时常量池

常量池运行时放到内存里,在内存中的位置叫做运行时常量池

(3)StringTable_面试题

StringTable是我们常说的串池

(4)StringTable_常量池和串池的关系

反编译:查看常量池 是什么样子:

astore_1是把a这个常量存到1号的局部变量 

LocalVariableTable:是main方法栈帧运行时局部变量表

是main方法栈帧运行时局部变量表的变量s1编号是1

StringTable [ ]  数据结构上是一个哈希表,长度是固定的,不能扩容的

当ldc #2 执行这个指令会把a变成字符串对象,同时准别一个空间StringTable[] 串池,把a作为key去StringTable中找有没有这个,没有的话放a对象放入串池

(5)StringTable_字符串变量拼接

反编译查看main方法中的指令:

#5:创建StringBuild对象

#6:调用StringBuild的无参构造

aload1:是把参数s1加载进来

#7:调用StringBuild的append方法

#8:调用StringBuild对的toString方法

astore4:是把toString转换后的结果存入4号的局部变量s4中

StringBuild中toString方法内部是new 了一个String(ab)的对象,s4是存在堆中的,s3是串池中的是两个对象

更多推荐

安防监控系统/视频云存储EasyCVR平台视频无法播放是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓

docker-基本操作命令,生成docker镜像包

一、帮助启动类命令。1、启动,命令:systemctlstartdocker2、停止,命令:systemctlstopdocker3、重启,命令:systemctlrestartdocker4、查看docker状态,命令:systemctlstatusdocker5、开机启动,命令:systemctlenabledoc

20230921研发面经总结

1.cpp中引用和指针的区别引用是在概念上定义一个变量的别名,而指针是存储一个变量的地址。引用必须从一而终,不能再指向其他数据;指针可以随意改变指向。引用在定义时必须初始化,而指针是最好初始化,不初始化也不会报错。指针可以有多级,引用不可以。存在空指针,但是不存在空引用。2.介绍const,各种使用情况的效果1.con

Codeforces Round 896 (Div. 1) C. Travel Plan(树形dp+组合数学)

题目有一棵n(1<=n<=1e18)个点的树,点i连着2*i和2*i+1两个点,构成一棵完全二叉树对于每个点i,记其值为a[i],a[i]可以取[1,m](1<=m<=1e5)的整数记i到j的简单路径上的最大值为s[i][j],则一棵权值确定的树对答案的贡献是现在求所有可能情况下的树的贡献之和,答案对998244353

手撕 LFU 缓存

大家好,我是方圆。LFU的缩写是LeastFrequentlyUsed,简单理解则是将使用最少的元素移除,如果存在多个使用次数最小的元素,那么则需要移除最近不被使用的元素。LFU缓存在LeetCode上是一道困难的题目,实现起来并不容易,所以决定整理和记录一下。如果大家想要找刷题路线的话,可以参考Github:Leet

数据分析实战│时间序列预测

时间序列预测问题是一类常见的数据分析问题。数据中往往包含时间标签,这类问题往往根据过去一段时间的数据,建立能够比较精确地反映序列中所包含的动态依存关系的数学模型,并对未来的数据进行预测。01、问题描述及数据挖掘目标本案例给出二战时期的某气象站温度记录值,通过分析之前的天气状况来预测将来天气情况。与回归分析模型进行预测不

使用新版Maven-mvnd快速构建项目

目前我们项目的构建方式多数是maven、gradle,但是maven相对gradle来说,构建速度较慢,特别是模块相对较多的时候,构建速度更加明显。但是我们将项目由maven替换为gradle相对来说会比较麻烦,成本较高。于是我们可以选择mvnd来构建项目,可以使得构建项目速度更快,而且项目无需任何改动。1、下载mvn

SCT44160Q国产、车规 3.4-40V 160-mΩ四通道智能高位开关 P2P替代TPS4H160

SCT44160Q国产、车规3.4-40V160-mΩ四通道智能高位开关P2P替代TPS4H160北京冠宇铭通科技有限公司一级代理商描述SCT44160Q器件是全保护的四路通道智能高侧开关,带有四个集成的160-mΩNMOS功率场效应管。对于版本A,设备实现数字故障报告采用开路漏极结构,四通道同步设定电流限值。对于B版

2023年03月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程(1~6级)全部真题・点这里一、单选题(共25题,每题2分,共50分)第1题在启动IDLE后,看到下列哪一个提示字符,表明已经进入PythonShell交互模式?()A:<<<B:>>>C:^^^D:》》》正确的答案是:B:>>>解析:在启动IDLE后,当看到提示字符>>>,表示已经进入PythonSh

Python编辑器和Pycharm的傻瓜式安装部署

给我家憨憨写的python教程有惊喜等你找噢——雁丘Python解释器Pycharm的安装部署关于本专栏一Python编辑器1.1使用命令提示符编写Python程序1.2用记事本编写Python程序二Pycharm的安装三Pycharm的部署四Pycharm基础使用技巧4.1修改主题颜色4.2修改字体4.3快速修改字体

Flask狼书笔记 | 08_个人博客(下)

文章目录8个人博客8.4初始化博客8.5使用Flask-Login管理用户认证8.6CSRFProtect实现CSRF保护8.7编写博客后台小结8个人博客8.4初始化博客1、安全存储密码密码不要以明文的形式直接存储在数据库中,以防被攻击者盗取、泄露。一般的做法是,不存储密码本身,而存储通过密码生成的散列值。(但密码仍然

热文推荐