clojure-japan

tnoda 2015-07-23T02:12:48.000178Z

Monomorphic だったベクタのメソッドのインラインキャッシュがタプルのせいで megamorphic になってタプルが導入されるとベクタが遅くなる可能性がある。タプルが入ると call site が分割される(PersistentVector のメソッドが呼ばれる回数が減る)ので,ベクタのメソッドが JIT コンパイルされるタイミングが後ろになる。(Criterium で今まで実施されているような) マイクロベンチマークでは,これら現象をうまく測定できない。ということでしょうか。

tnoda 2015-07-23T02:12:55.000179Z

難しい

athos 2015-07-23T02:52:04.000180Z

PersistentVectorのメソッドの呼び出し回数が減るというよりは、megamorphic(1つのcall siteで複数クラスのメソッドが呼び出される)の状態になることで、メソッドのインライン化が効かなくなるとかそういうことだと思います。

tnoda 2015-07-23T05:38:49.000186Z

JIT コンパイルのことしか考えていなかったんですけど,Rich が bimorphic にしようと言っているのは devirtualization のほうですね。ご指摘ありがとうございました。

athos 2015-07-23T05:48:05.000187Z

JITコンパイルという言葉を先に出したのは僕なので、僕が誤解の元ですね…すいません😞

tnoda 2015-07-23T09:55:14.000193Z

😇