java编译时如何生成常量池索引

时间:2014-12-17 12:39:20

标签: java jvm

我对java类文件(.class)感兴趣 如果我们使用javap看到.class文件,可以看到常量池信息。

#4 = Utf8               java/lang/Object
#5 = Utf8               <init>
#6 = Utf8               ()V
#7 = Utf8               Code

索引#1,#2,#3,#4,#5,#6 .......

java编译器将genreate这些索引... 是否有规则来生成索引号?这是随机数吗?

1 个答案:

答案 0 :(得分:1)

  

是否有生成索引号的规则?

如果您的意思是,是否指定了规则(在JVM规范中),则答案为否。

  

是随机数吗?

没有。如果您深入研究了编译器源代码等,理论上 就会有足够的信息来预测常量池条目的索引值。索引的分配看起来是随机的,但它(我认为)是完全确定的和可重复的。

但是,预测任意Java程序的索引(不编译它!)不太可行。