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

标签 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编译器将会对这些索引进行分类... 索引号的生成有规则吗?是随机数吗?

最佳答案

Is there rules to generate index number?

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

is it random number?

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

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

关于java - java编译时如何生成常量池索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27525857/

相关文章:

java - 有没有办法知道特定程序运行的最大 JVM 调用堆栈深度?

java - 事件调度线程的“局部变量需要声明为final”

java - 比较两个 XmlBeans 对象是否相等

java - 是否有一个类在 Java 中公开了一个无缓冲的 readLine 方法?

Java比较速度

java - 返回尝试资源。这是 JVM 的正确行为吗?

java - RestEasy 服务部署在 Tomcat 7.0.47

java - 如何验证生成的 Java 代码的语法?

java - Sun permgen 和 JRockit 垃圾收集

java - 检索传递给 JVM 的主类/jar 文件名