据我所知,Java 6支持的字节码中没有任何主要功能,这些功能也无法从Java源代码访问。这样做的主要原因显然是Java字节码在设计时就考虑了Java语言。
但是,有些功能不是现代Java编译器提供的:
- 该
ACC_SUPER
标志:
这是可以在类上设置的标志,并指定如何
invokespecial为该类处理字节码的特定特殊情况。它是由所有现代Java编译器(如果我没有记错的话,其中“现代”>
= Java 1.1)设置的,只有古老的Java编译器会生成未设置此文件的类文件。该标志仅出于向后兼容的原因而存在。请注意,从Java
7u51开始,由于安全原因,ACC_SUPER被完全忽略。
- 该
jsr
/ret
字节码。
这些字节码用于实现子例程(主要用于实现
finally块)。从Java
6开始不再生产它们。之所以会弃用它们,是因为它们使静态验证复杂化了很多,却没有太大的收获(即,几乎总是可以用正常的跳转重新实现使用的代码,而开销却很小)。
- 一个类中有两个方法,只是返回类型不同。
Java语言规范不允许在同一个类中的两个方法时,它们之间的区别 只
在他们的返回类型(即相同的名字,相同的参数列表,…)。但是,JVM规范没有这样的限制,因此类文件 可以
包含两个这样的方法,只是没有办法使用普通的Java编译器来生成这样的类文件。



