Java的Class信息中的常量池中类或接口的全限定名字符串在类的解析后还会在JVM中存在吗? 5C

是不是换成了该类的内存地址偏移?
比如下面的截图中所示,最终解析后的这个CONSTANT_Class_info在JVM中的值是什么?
他指向的哪个CONSTANT_Utf8_info解析后是什么样的呢?
图片说明
图片说明

1个回答

你可以理解为一个结构体,它包括tag length 以及真正的字符串。

比如说
00 00 00 01 01 23 45 67
而01 23 45 67这个地址上存储了一个utf8_info
内容是
00 00 00 01 00 00 00 04 01 23 45 67
其中前面的00 00 00 01是 tag 后面那个 00 00 00 04是长度,再后面 01 23 45 67是实际内容。

当然,这只是一个假设的模型,实际上jvm怎么实现的,非常复杂,比如说intel是little endian,那么00 00 00 01就会是01 00 00 00。

wuxinliulei
无心流泪 回复caozhy: 但是JVM加载后在JVM中的内存布局是固定的或者说是有规可寻的,咱们的沟通出现问题了
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 jvm是根据具体的计算机设计的,而class是和具体的计算机完全无关的。明白?
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复wuxinliulei: 根本是两回事。反过来说,java怎么“跨平台”呢,因为class类都是一样的,机器是不一样的。所以jvm加载的类,和class文件根本没有关系的。
一年多之前 回复
wuxinliulei
无心流泪 解析后就已经是在JVM加载后的逻辑了,我问的就是这个啊,谢谢了,你可能没有理解我的问题?我表述有点不清楚吗?还是谢谢你了
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复wuxinliulei: 程序在class文件里和被jvm加载,是两回事。所有的类都要被jvm加载后才存在,和文件上怎么存的,存了什么一点关系也没有啊。
一年多之前 回复
wuxinliulei
无心流泪 回复caozhy: 我的意思是Java中的class被加载后,原本的Class字节码内容肯定变了啊
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复wuxinliulei: 和符号引用变成了直接引用都没有任何关系啊
一年多之前 回复
wuxinliulei
无心流泪 解析后不是从符号引用变成了直接引用吗?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!