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
Published: 2015-09-28(Mon) 17:28