Expected performance difference between ConstantCallSite and unchanging MutableCallSite
Rémi Forax
forax at univ-mlv.fr
Mon May 16 00:50:42 PDT 2011
On 05/16/2011 02:36 AM, Charles Oliver Nutter wrote:
> Can I get a rough guesstimate from the JVM guys how much more overhead
> is involved in accessing a never-changed MutableCallSite versus a
> ConstantCallSite? I have a few places where I want to use
> invokedynamic to lazily initialize some literals. They'll never change
> after the initial construction, but I can't create them in the
> bootstrap because I need the state they pass in (e.g. the
> org.jruby.Ruby instance they're associated with). I'd like to bind a
> constant method handle into the site after the first call and never
> change it again.
>
> - Charlie
Theoretically, the is no speed difference between a ConstantCallSite
and a MutableCallSite that at some point never mutate.
The difference is more that a MutableCallsite has to keep metada
to trigger a de-optimization and not the ConstantCallSite.
Now, practically, I don't know if hotspot make a difference between them.
Charles, in your case you have two options:
First, you are able to serialize the literal in the bytecode, the trick is
that you can see an array of byte as a String, Terence Parr explains that
2 or 3 years ago at the JVM Summit.
Second, if you know the org.jruby.Ruby instance when generating
the code, you can cache it and look it up in the BSM.
Rémi
More information about the mlvm-dev
mailing list