imaxonor 发表于 2022-11-26 19:30

java中静态方法存储在哪,方法区还是java栈

java中静态方法存储在哪,方法区还是java栈,运行时数据又存在哪,会像非静态方法一样在java栈中创建一个栈帧么?

phubing 发表于 2022-11-26 23:38

https://www.coder.work/article/6302513

https://www.fke6.com/html/18881.html

https://www.zhihu.com/question/54129548/answer/2399852601

siegod 发表于 2022-11-27 03:50

方法区组成:字符串常量池、元空间(运行时常量池、类型信息...)

常说运行时常量池就是类信息的ConstantPool,每个class都有一个ConstantPool 存储字面量、符号引用、方法描述符、类描述符、字段描述符等等,你通过反编译就可以看到

当我们进行类加载时候就会在链接-解析阶段将符号引用替换为直接引用,说白了就是解析类方法时创建method对象,然后设置ConstantPool中符号引用所在Entry的属性指向method内存地址(非final方法存储虚方法表索引值)

静态方法/非静态方法执行是一样的,都会申请栈帧进行动态链接指向method内存地址

运行时数据又存在哪? 当然是JVM申请内存空间,运行时数据区:方法区、堆、虚拟机栈、本地方法栈、程序计数器





imaxonor 发表于 2022-11-28 11:55

siegod 发表于 2022-11-27 03:50
方法区组成:字符串常量池、元空间(运行时常量池、类型信息...)

常说运行时常量池就是类信息的Consta ...

高手啊看来您对这块了解的很多
页: [1]
查看完整版本: java中静态方法存储在哪,方法区还是java栈