Snippetsスマートフォン用の表示で見るSnippets対抗して作ってみた。2015-12-08ああ、invokedynamicがなandroidみなさん、invokedynamic知ってますよね。lambdaで使われてるやつです。振ってみましたが、知らない人も多いような気もします。lambda使えなくて歯噛みしてるやつです。ちなみに「がな」は「あったらいいなあ」という意味だと昔ならいました。そんなのだれが気にしてるんだ。あと30分で書かないといかん。invokedynamic」という講演があったからです。Java7に導入されることになったのでした。いう人が日本で話してくれるとなればいかねばなりません。bytecodeがありました。invokespecialです。それぞれの内容は名前から推測してください。Javaに向いたもので、Rubyなどのような動的言語を実装するには向いてませんでした。invokedynamicです。cacheを実装するためのもの、といえばわかるでしょうか。cacheだけのものではりません。Java言語自体でカスタマイズできる、まるでリフレクションのような仕組みです。JVMのオプティマイズがきき、inline化とかいろいろできるぜ、っていうのが売りです。bootstrapというコードがくっついています。返し、JVMはそれを関数ポインタの用に扱ってジャンプします。返すので、JVMはその事実をもとにいろいろ最適化できるというわけです。この最適化はヒューリスティックにもとづいています。tableみたいなものを見るより速くなる、というわけです。Methodhandle自体もいろいろあって、万が一予想外の型がきた時のためにガードをつけたりもできるようです。JRubyではどうつかっているかメソッド呼び出しこれはできた経緯からして当然ですね正規表現とかの定数コードに現れた正規表現とかを全部コンパイルしておくのはムダです。本当に使うかわからんからです。bootstrapで正規表現をコンパイルするようにします。CallSiteはできた正規表現オブジェクトをいつも返すようにすれば、その後は分岐とかなしに高速に実行されます。HotSpotの最適化が走って、最初からオブジェクトがおいてあったかのようなコードになるのでしょう。インスタンス変数の参照Rubyとかは、インスタンス変数を動的に付け加えられます。ここのところを一々名前で呼び出してたのでは遅くてたまらないので、invokedynamicでほげほげしてるらしいです。時間がないので端折ります。2から3倍ぐらい速くなっているようでした。5倍ぐらいになるよ、と。書いた実装よりも速くなったと自慢してました。Oracleのオフィスでした。Androidの話をするのは禁じられてるらしいです。Google次第だよなあ。ARTとか動いてて、でも大人の事情で出せなかったりするんじゃないのかなあ。Oracleェでなんとか間に合った。Sketch+CircleCiというネタで書くらしいです。23時前になって...2015-05-024月にやったことふと思いついて、4月にやったことのまとめ。自転車を盗まれたALPを支えられなかった技術(3)ALPを支えられなかった技術(2)ALPを支えられなかった技術(1)ALPを支えられなかった技術(0)月別アーカイブはてなブログをはじめよう!dageziさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。