java - JVM字节码中的 "dup2_x2"指令有什么用?

标签 java jvm javac jvm-bytecode

Java 有一个 dup2_x2 指令,根据 documentation , 具有以下行为:

Duplicate the top one or two values on the operand stack and insert the duplicated values, in the original order, into the operand stack.

javac 是否使用此指令生成字节码?它的潜在用例是什么?

最佳答案

例如下面的代码

public static Long example1(Long[] array, int i, long l) {
    return array[i]=l;
}
public static long example2(long[] array, int i, long l) {
    return array[i]=l;
}

编译为

  public static java.lang.Long example1(java.lang.Long[], int, long);
    Code:
       0: aload_0
       1: iload_1
       2: lload_2
       3: invokestatic  #1        // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
       6: dup_x2
       7: aastore
       8: areturn

  public static long example2(long[], int, long);
    Code:
       0: aload_0
       1: iload_1
       2: lload_2
       3: dup2_x2
       4: lastore
       5: lreturn

参见,demo on Ideone

关于java - JVM字节码中的 "dup2_x2"指令有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72120380/

相关文章:

jvm - 如何 fork JVM?

java - Sun GC 最大保留阈值

Java编译器自动重命名参数(混淆)

java - Collections.synchronizedList 传递到构造函数中

java - 使用 orElseThrow : Jacoco gives 0% code coverage 为Optional编写Mockito单元测试

java - 这个正则表达式是如何工作的?

java - 如何在 AWS Elastic Beanstalk 部署的 Java Web 应用程序中启用 WebSocket 请求

java - JVM 未使用所有可用堆空间

java - Ant javac 任务出错 : [javac] warning: [options] bootstrap class path not set in conjunction with -source 1. 6

java - maven 中 javac 编译顺序错误的解决方法