JVM易混淆名称

字面量:

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

变量:

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

常量:

final修饰的变量

静态变量:

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

符号引用:

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

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

符号引用包括以下常量:

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

直接引用:

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

常量池:

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

运行时常量池:

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

相关推荐
书唐瑞1 分钟前
Percona pt-archiver 出现数据不对等
java·服务器·数据库
ALLSectorSorft4 分钟前
相亲小程序个人资料管理系统模块搭建
服务器·网络·数据库·python·sql
CHEN5_0218 分钟前
【Java面试题】缓存穿透
java·开发语言·数据库·redis·缓存
丘山子28 分钟前
Python 布尔运算的优雅实践
后端·python·面试
XMYX-028 分钟前
Java HTTPS 请求失败排查与证书导入全过程
java·https
北_鱼29 分钟前
设计模式1:创建型模式
java·设计模式·软件工程·代码规范·设计规范
卍郝凝卍1 小时前
云服务器数据库
运维·服务器·数据库
惜鸟1 小时前
Mockito 的常见核心功能及注意事项
java·mockito
不辉放弃1 小时前
Spark SQL 的详细介绍
数据库·pyspark·大数据开发·sparksql
小毛驴8501 小时前
IntelliJ IDEA 的常用快捷键
java·ide·intellij-idea