JVM运行时常量池跟静态常量池区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    最近学习了JVM原理,遇到了运行时常量池的区域定义,他是属于JVM运行时内存模型方法区中的一部分,总体分布如下图:

 

如下图:整体分布如下

JVM运行时常量池跟静态常量池区别_第1张图片

而运行、静态常量池是属于方法区的一部分,一般我通常说的是运行时的常量区,他跟静态常量区区别是什么?

 

JVM运行时常量池跟静态常量池区别_第2张图片

 

 

个人认为,静态常量池是针对每个被加载进入内存的class文件解析后,存放各个字面量值,符号引用的数据,而运行时常量区就是把所有的静态常量的数据汇总到一起(模糊来说)。

JVM运行时常量池跟静态常量池区别_第3张图片

更底层到汇编层面来说,内存中的各个数据没有类这个概念,每次都是一个类一个方法的调用,就是相当于寄存器的相对变址寻址过程,

JVM运行时常量池跟静态常量池区别_第4张图片

JVM运行时常量池跟静态常量池区别_第5张图片

(上图中#1 #2等是否就是计算实际地址的符号哪?)

运行时方法区就是把每个类的唯一标识作为他的段地址(DS),而内部的各个变量字段方法等都是偏移地址(BX),等到真正入栈执行时候这些字段方法的相对定位符等被解析成为真正的地址,从而进入CS IP被识别执行;那么进一步猜想java的权限包的概念是否也可以由此得到全部的类信息汇总后进行进一步控哪

 

 

 

 

转载于:https://my.oschina.net/u/867830/blog/1609952

你可能感兴趣的:(JVM运行时常量池跟静态常量池区别)