Java かわいいよとみずしまさんがおっしゃってたのでとりあえず Hello world を書いてみました。 267Byte 。
http://shinh.skr.jp/binary/Code.class
普通にやると 409Byte くらい。
i@u ~/test/java> cat c.java public class c{ public static void main(String[] a){ System.out.println("Hello, world!"); } } i@u ~/test/java> javac c.java i@u ~/test/java> java c Hello, world! i@u ~/test/java> ls -l c.class -rw-r--r-- 1 i i 409 2006-12-20 06:45 c.class
javap してみるとコンストラクタが無かったり何故か PrintStream を継承してたりするわけですね。
i@u ~/wrk/binspect> javap Code public class Code extends java.io.PrintStream{ public static void main(java.lang.String[]); } i@u ~/wrk/binspect> ls -l Code.class -rw-r--r-- 1 i i 267 2006-12-20 06:47 Code.class i@u ~/wrk/binspect> java Code Hello, world!
やったこと。
- コードには全く手を入れていない
- コンストラクタ消した
- いらなさそうなものは全部消した
- クラスが Code という名前になってるのは、 Code という文字列はメソッドの内容示すために絶対必要みたいだったから
- PrintStream を継承しているのは Object の型名をクラスファイルに入れないため
手でいじるのは大変だったので、いじるためにちょっとしたツールを作ってみたんだけど、まぁそれはまた今度。
あと参考文献。
http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html