如何解决字节码功能在Java语言中不可用
据我所知,Java 6支持的字节码中没有任何主要功能,这些功能也无法从Java源代码访问。这样做的主要原因显然是Java字节码在设计时就考虑了Java语言。
但是,有些功能不是现代Java编译器提供的:
这是可以在类上设置的标志,并指定如何invokespecial
为该类处理字节码的特定特殊情况。它是由所有现代Java编译器(如果我没有记错的话,其中“现代”>
= Java 1.1)设置的,只有古老的Java编译器会生成未设置此文件的类文件。该标志仅出于向后兼容的原因而存在。请注意,从Java
7u51开始,由于安全原因,ACC_SUPER被完全忽略。
- 该
jsr
/ret
字节码。
这些字节码用于实现子例程(主要用于实现finally
块)。从Java
6开始不再生产它们。之所以会弃用它们,是因为它们使静态验证复杂化了很多,却没有太大的收获(即,几乎总是可以用正常的跳转重新实现使用的代码,而开销却很小)。
Java语言规范不允许在同一个类中的两个方法时,它们之间的区别 只 在他们的返回类型(即相同的名字,相同的参数列表,…)。但是,JVM规范没有这样的限制,因此类文件 可以 包含两个这样的方法,只是没有办法使用普通的Java编译器来生成这样的类文件。
解决方法
当前(Java 6)中是否有您可以用Java字节码执行的,您无法在Java语言中执行的操作?
我知道两者都已经完成了图灵,所以将“可以做”理解为“可以更快/更好地做事,或者只是以不同的方式做”。
我正在考虑invokedynamic
无法使用Java生成额外的字节码,例如,除非特定的字节码用于将来的版本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。