2015-11-01から1ヶ月間の記事一覧

Javaのバイトコードで遊ぶ (ラムダ式)

Javaのバイトコードで遊ぶ (Hello World) 以下のメソッドのカリー化を例にバイトコードでラムダ式を作ってみます。 int add(int a, int b, int c); ラムダ式の生成にはinvokedynamicと、そのブートストラップにLambdaMetafactory.metafactoryを用います。 me…

Javaのバイトコードで遊ぶ (フィールドとメソッドの定義)

Javaのバイトコードで遊ぶ (Hello World) まずはフィールドの定義について。 ClassWriter.visitFieldを用います。 こんな感じです。 // public static int a = 100; cw.visitField(ACC_PUBLIC + ACC_STATIC, "a", "I", null, 100); // public static String;…

Javaのバイトコードで遊ぶ (例外処理)

Javaのバイトコードで遊ぶ (Hello World) 例外の送出と捕捉を試してみます。 try-catchブロックの定義にはvisitTryCatchBlockを用います。 visitTryCatchBlock(Label start, Label end, Label handler, String type) startとendは、例外ハンドラのスコープの…

Javaのバイトコードで遊ぶ (stack map frame)

Javaのバイトコードで遊ぶ (Hello World) stack map frameについては以下を読みました。 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.4 http://download.forge.objectweb.org/asm/asm4-guide.pdf java - Is there a better ex…