JVM易混淆名称

字面量:

字面量指由字母、数字等构成的字符串或者数字常量,如1,"abc",10这些都是字面量

变量:

定义出一个符号,这个符号在某个范围内,就代表一个变化的量。要注意两点:1. 变量必须先定义才可以使用。2. 变量如果先被赋值或者初始化才可以使用。如 int a = 1,a就是变量;String s = "abc",s也是变量

常量:

final修饰的变量

静态变量:

static修饰的变量,只能是类的成员变量,不能定义在方法中

符号引用:

符号引用就是一个类中(当然不仅是类,还包括类的其他部分,比如方法,字段等)引入了其他的类,可是JVM并不知道引入的其他类在哪里,所以就用唯一符号来代替,等到类加载器去解析的时候,就通过符号引用找到那个引用类的地址(如果找不到说明引用类还没加载,那就直接把引用类也加载了),这个地址也就是直接引用。

在编译时,java类并不知道所引用的类的实际地址(只是javac编译,JVM还没运行呢,哪知道地址?),因此只能使用符号引用来代替

符号引用包括以下常量:

  • 被模块导出或者开放的包
  • 类和接口的全限定名
  • 字段的名称和描述符
  • 方法的名称和描述符
  • 方法句柄和方法类型
  • 动态调用点和动态常量

直接引用:

直接引用是可以直接指向目标的指针、相对偏移量 或者是一个能间接定位到目标的句柄。直接引用是和虚拟机的布局相关的,同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一般不会相同。如果有了直接引用,那引用的目标必定已经被加载入内存中了。

常量池:

每个class文件独有一份,常量池中有字面量(数量值、字符串值)和符号引用(类符号引用、字段符号引用、方法符号引用),虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等类型

运行时常量池:

当类加载到内存中后,jvm就会将class常量池中的内容存放到运行时常量池中,经过解析(resolve)之后,也就是把符号引用替换为直接引用

相关推荐
苹果醋36 分钟前
Java设计模式实战:从面向对象原则到架构设计的最佳实践
java·运维·spring boot·mysql·nginx
boy快快长大8 分钟前
【MySQL】InnoDB记录存储结构
数据库·mysql
yaoxtao9 分钟前
neo4j数据库的导入和导出
数据库
卓码软件测评12 分钟前
CMA/CNAS软件测评机构:【Gatling数据库性能关联测试JDBC连接和SQL执行时间监控】
数据库·sql·测试工具·性能优化·测试用例
郑州光合科技余经理16 分钟前
实战分享:如何构建东南亚高并发跑腿配送系统
java·开发语言·javascript·spring cloud·uni-app·c#·php
lixora18 分钟前
备份指定oracle block 防止误操作
数据库
yaoxin52112321 分钟前
273. Java Stream API - Stream 中的中间操作:Mapping 操作详解
java·开发语言·python
一念一花一世界24 分钟前
Arbess从基础到实践(25) - 集成GitLab+阿里云OSS实现Java项目自动化构建并将制品上传Aliyun OSS
java·阿里云·gitlab·cicd·arbess
凯子坚持 c25 分钟前
Redis 数据库的服务器部署与 MCP 智能化交互深度实践指南
服务器·数据库·redis
liyi_hz200826 分钟前
企业信创落地深水区:O2OA(翱途)平台的国产化适配实践与技术思考
java·开源软件