哪些低级别任务可以在JVM上完成,但在java中没有表达?

时间:2010-03-09 03:12:42

标签: java bytecode

哪些有用的(用于性能或其他方面)构造是有效的字节码,但在Java中无法表达?

4 个答案:

答案 0 :(得分:6)

  1. 您可以抛出任何对象,而不仅仅是异常。
  2. 您可以在返回类型上重载。
  3. 你可以抛出任何异常,而不会在投掷中声明它。

答案 1 :(得分:3)

JVM字节码是stack-oriented programming language,因此大多数堆栈管理指令在Java中没有意义,例如: dupswap等等。当然,任意goto在Java中也无法表达。

JSR 292之类的东西建议支持动态类型语言,我认为Java不会计划成为这种语言。

我认为这里需要解决一些问题:你的问题似乎至少部分是由绩效问题推动的。在实践中,字节码被JIT编译为汇编。是否有一个超级神奇的字节码指令实在是没有实际意义。

答案 2 :(得分:2)

我已经读过字节码方法签名支持返回类型上的多个调度,而Java只允许在参数类型上调度相同名称的方法。

答案 3 :(得分:1)

有时候情况恰恰相反。

例如,Java的内部类的可见性不能用字节码表示。 JVM只知道受包受保护,受保护,公共和私有的可见性。因此Java编译器必须使用hack:它生成合成包装器方法(可以看到包),以将内部类的私有字段和方法暴露给外部类。