JVM易混淆名称

字面量:

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

变量:

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

常量:

final修饰的变量

静态变量:

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

符号引用:

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

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

符号引用包括以下常量:

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

直接引用:

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

常量池:

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

运行时常量池:

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

相关推荐
倔强的石头_18 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
Derek_Smart19 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP20 小时前
MyBatis-mybatis入门与增删改查
java
Lee川21 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i1 天前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
孟陬1 天前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端
想用offer打牌1 天前
一站式了解四种限流算法
java·后端·go
绝无仅有1 天前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有1 天前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
华仔啊1 天前
Java 开发千万别给布尔变量加 is 前缀!很容易背锅
java