On Mon, May 16, 2011 at 2:50 AM, Rémi Forax <fo...@univ-mlv.fr> wrote: > 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.
Yes, I have been using this trick on and off since I started working on JRuby in 2006...it works, but it still requires unpacking the bytes and constructing a new byte[] every time, which is quite a bit more overhead than being able to bind a byte[] or ByteList directly into a constant MH. > Second, if you know the org.jruby.Ruby instance when generating > the code, you can cache it and look it up in the BSM. Well, that's a bridge I'm going to have to cross soon. Because the the call sites are associated with code at the bytecode level, and the call sites are not localized to a given JRuby runtime, we will need to isolate jitted code across JRuby instances. At the moment, we do allow sharing that code...disallowing that sharing should not be particularly difficult. More difficult, however, will be allowing precompiled code to have unique call site information for each JRuby runtime. Normally it's all loaded in the same classloader, so isolating them will be trickier and require manual intervention. Currently all generated bytecode isolates call sites by instantiating a cache and associating it with an instance of the script. Each runtime then has its own instance of the script, and call sites are isolated. invokedynamic call sites essentially move call site information to a static level. This will affect other languages, I'm sure...so other language implementers probably should keep it in mind; invokedynamic call sites are bound on a classloader-global basis. - Charlie _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev