有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用javap查看哪些字节码行对应于Java代码中的行?

我的任务是制作一种计算给定向量大小的方法,然后使用javap -c将其分解

现在,我必须说明在java中,震级框架中的每个局部变量对应于什么,以及字节码的哪些行对应于什么

以下是我的方法:

public class Vector {
    /** Magnitude of vector
     * Calculates the magnitude of the vector corresponding
     *   to the array a.
     *
     * @return magnitude
     */
    public double magnitude(double[] a){
        int n = a.length;
        double sum = 1;
        for (int i=0; i<n; i++){
            sum = sum*a[i];
        }
        double magnitude = Math.sqrt(sum);
        return magnitude;
    }
}

下面是使用javap -c的结果:

public class Vector { 
  public Vector(); 
    Code: 
       0: aload_0 
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V 
       4: return 

  public double magnitude(double[]); 
    Code: 
       0: aload_1 
       1: arraylength 
       2: istore_2 
       3: dconst_1 
       4: dstore_3 
       5: iconst_0 
       6: istore        5 
       8: iload         5 
      10: iload_2 
      11: if_icmpge     27 
      14: dload_3 
      15: aload_1 
      16: iload         5 
      18: daload 
      19: dmul 
      20: dstore_3 
      21: iinc          5, 1 
      24: goto          8 
      27: dload_3 
      28: invokestatic  #2                  // Method java/lang/Math.sqrt:(D)D 
      31: dstore        5 
      33: dload         5 
      35: dreturn 
}

共 (1) 个答案

  1. # 1 楼答案

    使用-l标志运行javap

    $ javap -c -l Vector
    
    Compiled from "Vector.java"
    public class Vector {
      public Vector();
        Code:
           0: aload_0       
           1: invokespecial #1                  // Method java/lang/Object."<init>":()V
           4: return        
        LineNumberTable:
          line 1: 0
    
      public double magnitude(double[]);
        Code:
           0: aload_1       
           1: arraylength   
           2: istore_2      
           3: dconst_1      
           4: dstore_3      
           ...
          35: dreturn       
        LineNumberTable:
          line 12: 0
          line 14: 3
          line 16: 5
          line 18: 14
          line 16: 21
          line 22: 27
          line 24: 33
    }
    

    例如,您可以看到说明3&;4对应于第14行,其中1被加载到索引2处的double