LoginSignup
4
3

More than 5 years have passed since last update.

Java バイトコードにおけるメソッドの長さを調べる

Last updated at Posted at 2013-11-19

計算方法

ソースコードから計算

javap コマンドを実行すると、クラスファイルが逆アセンブルされ、 Java バイトコードが人間の読みやすい形式で出力される。

javac Employee.java
javap -c Employee.class

この出力結果であるバイトコードを見れば、各メソッドの長さを計算できる。

ちなみに、 Java バイトコードのオペーコードは 1 byte である。
複数の引数を必要とする命令もあるため、結果として1命令は複数 byte になりえる。

Jar ファイルから計算

jar ファイルを解凍し、クラスファイルを取り出す。
そのクラスファイルを引数として指定し、 javap コマンドを実行すれば良い。

jar xvf sample-1.0-SNAPSHOT.jar
javap -c com/hidetai/Employee.class

Employee.java
package com.hidetai;

public class Employee
{
    private int id;

    void setId(int id) {
        this.id = id;
    }

    int getId() {
        return id;
    }
}

上記のコードをコンパイルし、クラスファイルを生成する。
そして、そのクラスファイルを引数として javap コマンドを実行する。

javap -c Employee.class

すると、以下のようなバイトコードが出力される。

Employee.bc
Compiled from "Employee.java"
public class com.hidetai.Employee {
  public com.hidetai.Employee();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  void setId(int);
    Code:
       0: aload_0
       1: iload_1
       2: putfield      #2                  // Field id:I
       5: return

  int getId();
    Code:
       0: aload_0
       1: getfield      #2                  // Field id:I
       4: ireturn
}

この出力を見れば、例えば setId(int) メソッドは 6 byte の長さであることが分かる。

javap

クラスファイルを逆アセンブルするコマンド。

以下のページに仕様が書いてある。

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3