Enviar pesquisa
Carregar
InvokeDynamic at #shikadriven 2012
•
6 gostaram
•
965 visualizações
Go Tanaka
Seguir
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 38
Baixar agora
Baixar para ler offline
Recomendados
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
Kazuyoshi Kamitsukasa
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
Taku Miyakawa
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Taku Miyakawa
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
Uehara Junji
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
Tomohiro Kumagai
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__
Tomohiro Kumagai
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
Uehara Junji
Recomendados
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
Kazuyoshi Kamitsukasa
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
Taku Miyakawa
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Taku Miyakawa
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
Uehara Junji
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
Tomohiro Kumagai
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__
Tomohiro Kumagai
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
Uehara Junji
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
Xtend30分クッキング やきに駆動
Xtend30分クッキング やきに駆動
Shinichi Kozake
Kanazawa.js.Next
Kanazawa.js.Next
dynamis
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
Tomohiro Kumagai
Unityで覚えるC#
Unityで覚えるC#
Masamitsu Ishikawa
Xtend30分クッキング
Xtend30分クッキング
Shinichi Kozake
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
higaki
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
Tomohiro Kumagai
可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift
Tomohiro Kumagai
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
Yasuhiro Yoshimura
はじめてのJPA
はじめてのJPA
kawaba
Ecmascript2015とその周辺について
Ecmascript2015とその周辺について
豊明 尾古
探検!SwiftyJSON
探検!SwiftyJSON
Yuka Ezura
Lombokのススメ
Lombokのススメ
なべ
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
陽平 山口
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
uranishi
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話
emorins
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
Jug java7
Jug java7
Dmitry Buzdin
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Amazon Web Services
Mais conteúdo relacionado
Mais procurados
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
Xtend30分クッキング やきに駆動
Xtend30分クッキング やきに駆動
Shinichi Kozake
Kanazawa.js.Next
Kanazawa.js.Next
dynamis
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
Tomohiro Kumagai
Unityで覚えるC#
Unityで覚えるC#
Masamitsu Ishikawa
Xtend30分クッキング
Xtend30分クッキング
Shinichi Kozake
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
higaki
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
Tomohiro Kumagai
可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift
Tomohiro Kumagai
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
Yasuhiro Yoshimura
はじめてのJPA
はじめてのJPA
kawaba
Ecmascript2015とその周辺について
Ecmascript2015とその周辺について
豊明 尾古
探検!SwiftyJSON
探検!SwiftyJSON
Yuka Ezura
Lombokのススメ
Lombokのススメ
なべ
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
陽平 山口
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
uranishi
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話
emorins
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
Mais procurados
(20)
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
Xtend30分クッキング やきに駆動
Xtend30分クッキング やきに駆動
Kanazawa.js.Next
Kanazawa.js.Next
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
Unityで覚えるC#
Unityで覚えるC#
Xtend30分クッキング
Xtend30分クッキング
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
はじめてのJPA
はじめてのJPA
Ecmascript2015とその周辺について
Ecmascript2015とその周辺について
探検!SwiftyJSON
探検!SwiftyJSON
Lombokのススメ
Lombokのススメ
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
Destaque
Jug java7
Jug java7
Dmitry Buzdin
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Amazon Web Services
Large scale-olap-with-kobayashi
Large scale-olap-with-kobayashi
Boundary
Charles nutter star techconf 2011 - jvm languages
Charles nutter star techconf 2011 - jvm languages
StarTech Conference
Evolving Operations for BBC iPlayer
Evolving Operations for BBC iPlayer
Amazon Web Services
Going Cloud First at the FT
Going Cloud First at the FT
Amazon Web Services
Java Closures
Java Closures
Ben Evans
Rjb
Rjb
Wes Gamble
Destaque
(8)
Jug java7
Jug java7
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Welcome to the AWS Cloud - AWS Symposium 2014 - Washington D.C.
Large scale-olap-with-kobayashi
Large scale-olap-with-kobayashi
Charles nutter star techconf 2011 - jvm languages
Charles nutter star techconf 2011 - jvm languages
Evolving Operations for BBC iPlayer
Evolving Operations for BBC iPlayer
Going Cloud First at the FT
Going Cloud First at the FT
Java Closures
Java Closures
Rjb
Rjb
Semelhante a InvokeDynamic at #shikadriven 2012
Jvm internal
Jvm internal
Go Tanaka
Cve 2013-0422
Cve 2013-0422
abend_cve_9999_0001
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
JVMの中身を可視化してみた
JVMの中身を可視化してみた
Kengo Toda
Head toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjug
Yuji Kubota
Driverについて
Driverについて
幸雄 村上
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
R5 3 type annotation
R5 3 type annotation
EIICHI KIMURA
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
Semelhante a InvokeDynamic at #shikadriven 2012
(10)
Jvm internal
Jvm internal
Cve 2013-0422
Cve 2013-0422
Java仮想マシンの実装技術
Java仮想マシンの実装技術
JVMの中身を可視化してみた
JVMの中身を可視化してみた
Head toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjug
Driverについて
Driverについて
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
R5 3 type annotation
R5 3 type annotation
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Mais de Go Tanaka
DevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJS
Go Tanaka
CPU
CPU
Go Tanaka
Knockout handson
Knockout handson
Go Tanaka
Knockout bindings
Knockout bindings
Go Tanaka
Implement curry
Implement curry
Go Tanaka
Log4j 2 writing
Log4j 2 writing
Go Tanaka
Log4j 2 source code reading
Log4j 2 source code reading
Go Tanaka
Studying Network #1
Studying Network #1
Go Tanaka
Inside The Java Virtual Machine
Inside The Java Virtual Machine
Go Tanaka
FxUG HTML5
FxUG HTML5
Go Tanaka
Nettyらへん
Nettyらへん
Go Tanaka
T2 reading 20101126
T2 reading 20101126
Go Tanaka
Kanjava20110302
Kanjava20110302
Go Tanaka
GWT♥HTML5
GWT♥HTML5
Go Tanaka
Slim3 Gwt In Action
Slim3 Gwt In Action
Go Tanaka
はじめてのPHP
はじめてのPHP
Go Tanaka
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日
Go Tanaka
Mais de Go Tanaka
(17)
DevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJS
CPU
CPU
Knockout handson
Knockout handson
Knockout bindings
Knockout bindings
Implement curry
Implement curry
Log4j 2 writing
Log4j 2 writing
Log4j 2 source code reading
Log4j 2 source code reading
Studying Network #1
Studying Network #1
Inside The Java Virtual Machine
Inside The Java Virtual Machine
FxUG HTML5
FxUG HTML5
Nettyらへん
Nettyらへん
T2 reading 20101126
T2 reading 20101126
Kanjava20110302
Kanjava20110302
GWT♥HTML5
GWT♥HTML5
Slim3 Gwt In Action
Slim3 Gwt In Action
はじめてのPHP
はじめてのPHP
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日
Último
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
Último
(9)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
InvokeDynamic at #shikadriven 2012
1.
鹿駆動勉強会@能楽堂
5分でわかる!? InvokeDynamic 12年4月30日月曜日
2.
#shikadriven@能楽堂
絶賛 幽霊部員 @tan_go238/JVM/ぬる舗/迷子 なう! 関西Javaエンジニアの会/京都JAWS-UG COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
3.
#shikadriven@能楽堂
「InvokeDynamic」で知るべき 3- つのこと ① Javaがどうやって動いているか ② InvokeDynamicの基本 ③ JVM上で動作する動的言語 COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
4.
#shikadriven@能楽堂
Javaの動作原理 COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
5.
#shikadriven@能楽堂
ソースコードが実行されるまで ① ② ③ Class Java Class JVM 中間ファイル ソースコード 実行 (バイナリ) COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
6.
#shikadriven@能楽堂
ソースコード COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
7.
#shikadriven@能楽堂
MyObj example() { MyObj o = new MyObj(); Javaソースコード int i = o.exe(); return silly(o, i); } javap -c -verbose ... MyObj example(); 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 Classファイルを 9: invokevirtual #19; //Method MyObj.exe:()I 解析した結果 12: istore_2 13: aload_0 14: aload_1 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; 19: areturn COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
8.
#shikadriven@能楽堂
aload_0 とか invokevirtual ってなんなの?? COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
9.
#shikadriven@能楽堂
Java仮想マシンの命令セット invokespecial #19; //Method MyObj.exe:()I ニーモニック オペランド 【invokespecial】 インスタンスメソッドを呼び出す COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
10.
#shikadriven@能楽堂
Java仮想マシンの命令セット ワイルドだぜぇ Java7では、Java仮想マシンの命令セットに invokedynamic という命令セットが追加された COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
11.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 13: aload_0 14: aload_1 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; *MyObj this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
12.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 13: aload_0 14: aload_1 *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; *MyObj this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
13.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 13: aload_0 14: aload_1 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; *MyObj this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
14.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 13: aload_0 14: aload_1 *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
15.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 13: aload_0 14: aload_1 *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; *MyObj this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
16.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 13: aload_0 14: aload_1 *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; int this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
17.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 int 13: aload_0 14: aload_1 *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
18.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 int 13: aload_0 14: aload_1 *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; this this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
19.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 int 13: aload_0 14: aload_1 *MyObj *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; this this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
20.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 int int 13: aload_0 14: aload_1 *MyObj *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; this this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
21.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 int 13: aload_0 14: aload_1 *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; *MyObj this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
22.
#shikadriven@能楽堂
メソッド実行時のJVM内部の動作 MyObj example(); オペランドスタック ローカル変数 0: new #16; //class MyObj 3: dup 4: invokespecial #18; //Method MyObj."<init>":()V 7: astore_1 8: aload_1 9: invokevirtual #19; //Method MyObj.exe:()I 12: istore_2 起動側フレームのスタック int へとプッシュされる 13: aload_0 14: aload_1 *MyObj 15: iload_2 16: invokevirtual #23; //Method silly:(LMyObj;I)LMyObj; *MyObj this 19: areturn ※オペランドスタック…Java仮想マシンの作業用領域 ※ローカル変数…各フレーム毎に保持される変数の配列 ※他に実行時コンスタントプールがある COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
23.
#shikadriven@能楽堂
詳しくは Java仮想マシン仕様 または「やきに駆動」の資料 http://slidesha.re/se1Hun COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
24.
#shikadriven@能楽堂
InvokeDynamicの基本 COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
25.
#shikadriven@能楽堂
InvokeDynamicとは 簡単に言えば 型情報をもつ関数のポインタ JVM上で動作する動的言語のために追加 COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
26.
#shikadriven@能楽堂
InvokeDynamicの基本 invokedynamic bootstrapメソッド (初回時) CallSite 実行 MethodHandle 対象のメソッド COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
27.
#shikadriven@能楽堂
InvokeDynamicの基本 invokedynamic bootstrapメソッド (初回時) CallSite 実行 MethodHandle 対象のメソッド COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
28.
#shikadriven@能楽堂
CallSite MethodHandleの参照を保持する ConstantCallSite MHは書き換えられない MutableCallSite MHが書き換えられる MHが書き換えられる VolatileCallSite Volatileである COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
29.
#shikadriven@能楽堂
InvokeDynamicの基本 invokedynamic bootstrapメソッド (初回時) CallSite 実行 MethodHandle 対象のメソッド COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
30.
#shikadriven@能楽堂
MethodHandle MHを合成したり、引数を部分適用したりして、 対象のメソッドを呼び出す MethodHandle#bindTo 第1引数のレシーバを固定 MethodHandles#insertArguments 引数を部分適用したMHを生成 test, then, elseの3MHを合成して MethodHandles#guardWithTest 実行時に分岐するMH MethodHandles#filterReturnValue 処理の戻り値に後処理を加えるMH COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
31.
#shikadriven@能楽堂
JVM上で動作する 動的言語 COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
32.
#shikadriven@能楽堂
JVM上で動作する動的言語とは COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
33.
#shikadriven@能楽堂
JVM上で動作する動的言語とは ここで グルービー のロゴ入れとけば 後でgdgd言われない! COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
34.
#shikadriven@能楽堂
JVM上の動的言語の問題点 コンパイラの恩恵を受けにくい JITコンパイルは実行時に必要に応じて以下のような最適化を行う ・インライン展開 ・ループ展開 ・ロック解除 ・デッドコード削除 ・エスケープ解析 COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
35.
#shikadriven@能楽堂
DynamicInvokeがないとき これらの最適化の処理を処理系がやっていた ・いろいろ大変 ・その割に速度がでない etc.. COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
36.
#shikadriven@能楽堂
DynamicInvokeがあるとき JVMにおまかせ! ただし、JVMに最適化されるように ・Javaのコードは極力入れない ・MHの再検索を極力減らす などといったことに注意する COPYRIGHT 2012 PLUGRAM, inc. 12年4月30日月曜日
37.
まとめ
InvokeDynamicを使うと... ・呼び出すメソッドを動的に切り替えられる ・呼び出すメソッドを独自のルールで検索し実行できる ・JITコンパイルに最適化される 12年4月30日月曜日
38.
ありがとうございました! 12年4月30日月曜日
Baixar agora