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