什么是JVM 运行时常量池

2020-09-21  本文已影响0人  rainy618

一、方法区 - 运行时常量池

常量池,可以看做是一张表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型,字面量等类型。

运行时常量池 vs 常量池

    - 方法区,内部包含了运行时常量池
    - 字节码文件,内部包含了常量池

​ 要弄清楚方法区,需要理解清楚ClassFile,因为加载内的信息都在方法区。

​ 要弄清楚方法区的运行时常量池,需要理解清楚ClassFile中的常量池。

image

为什么需要常量池?

​ 一个Java源文件中的类、接口,编译后产生一个字节码文件。而Java中的字节码需要数据支持,通常这种数据会很大以至于不能直接存在字节码文件,换另一种方式,可以存在常量池,这个字节码包含了指向常量池的引用。在动态链接的时候会用到运行时常量池。

什么是符号引用?什么是直接应用?

什么是动态链接?

  动态链接就是指向运行时常量池的方法引用,动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。

​ 在Java源文件被编译到的字节码文件中时,所有的变量和方法引用都作为符号引用保存在Class文件中的常量池里面。

符号引用 ----> 直接引用

栈帧

[图片上传失败...(image-b8ec8b-1600702650468)]

动态链接

image

1.1运行时常量池

image

Javad 方法区究竟存了什么???

image

上一篇下一篇

猜你喜欢

热点阅读