【问题标题】:Why is the attribute_name_index in JVM Classfile an index?为什么JAVA Class File中的属性名索引是索引?
【发布时间】:2020-01-07 03:01:48
【问题描述】:

这个页面https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7

对于所有属性,attribute_name_index 必须是类常量池的有效无符号 16 位索引。

但是,我想知道这个字段直接代表它自己的种类是否比当前规范更好。

(例如)如果attribute_name_index == 0x01,则属性类型将固定为StackMapTable,而不引用常量池。

当前规格的优点是什么?

【问题讨论】:

  • 规范就是规范。问它为什么是这样,或者为什么它不是你认为应该的那样,基本上是徒劳的。
  • 我不禁注意到大金字塔是用石头建造的,用了 50 年才建成。如果他们用钢不是更好吗? :-)

标签: java jvm specifications .class-file


【解决方案1】:

Java 属性几乎可以使用任何字符串作为名称。这是一个可扩展的系统。 JVM 规范定义了几十个标准属性,但用户也可以定义自己的自定义属性(Scala 尤其使用这种能力来实现 Scala 特定的运行时功能)。

【讨论】:

    【解决方案2】:

    为什么JVM Classfile中的attribute_name_index是索引?

    因为那是他们指定的。无论好坏。

    请注意,原始类文件格式是在 1990 年代初定义的,远在 Java 被称为 Java 之前;见Why do Java class file versions start from 45?

    当前规格的优点是什么?

    • 它是可扩展的。

    • 结构紧凑;例如一个名称的常量池条目可以在类文件的多个位置引用。

    • 这是一致的。

    • 已指定,该规范已被广泛采用/实施。

    但这一切都没有实际意义......除非您打算实现自己的新类文件格式。

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2019-05-29
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2011-09-25
      相关资源
      最近更新 更多