Blog

java と strace

java command は clone(2) するので、普通に strace してもダメ。 strace -f java ... のように -f オプションをつければ、clone した先も追ってくれるので、トレース可能となる。

ためしに以下のような何もしないプログラムを用意してみる。

public class Hello {
    public static void main(String[] args) {
    }
}

javac Hello.java とした後、strace -o java.log -f java Hello とすると、java.log というファイルが作成され、どのようなシステムコールを JVM が発行しているかがわかる。

ちなみに /usr/bin/perl -e0 した場合と比べると以下のようになり、Java で開発を行うと何もしないプログラムでもたくさんの system call を呼ぶことができて 便利 だということがわかる。

$ wc -l java.log perl.log
16735 java.log
232 perl.log