On 08/18/2014 12:01 PM, Raffaello Giulietti wrote:
Starting with Java 7, the recommended way to implement dynamic
languages is to build upon invokedynamic (indy), method handles (MH)
and their combinators, all of which are intrinsically known to the
JVM. This intimacy allows the JVM to leverage many JIT optimizations
already at our service for ordinary Java code.
A standard optimization is polymorphic inline caches (PIC). To support
PICs for dynamic languages on the JVM, best practices recommend to
build a tree-like structure at each active indy call site, where a
(very limited) cascade of guard-with-test (GWT) MHs represents the
spine of the cache.
It seems to me, however, that all this requires a lot of objects for
each single indy site. Even granted that the JVM can beautifully
inline the code of the specialized MHs like GWT MHs and bound-MHs (for
the test), it still needs to maintain a large number of PIC trees. And
PIC trees cannot usually be shared, since each call site has its own
usage profile.
So, the question is whether some of you has experience with large
scale projects written in a dynamic language implemented on the JVM,
that makes heavy use of indy and PICs. I'm curious about the memory
load for the PICs. I'm also interested whether the standard Oracle
server JVM satisfactorily keeps up with the load.
For example, we have a large Smalltalk application with about 50'000
classes and about 600'000 methods. In Smalltalk, almost everything in
code is a method invocation, including operators like +, <=, etc. I
estimate some 5-10 millions method invocation sites. How many of them
are active during a typical execution, I couldn't tell. But if the
Smalltalk runtime were implemented on the JVM, PICs would quite
certainly represent a formidable share of the memory footprint.
More generally, apart from toy examples, are there studies in
real-world usage of indy and PICs in large applications?
Perhaps some figures from the JRuby folks, or better, their users'
applications would be interesting.
Thanks for numbers
Raffaello Giulietti
There are several Smalltalk implementations that already use
invokedynamic, so you can ask their maintainers for data, on top of my
head you have Rtalk by Mark Roos [1], Magic (smalltalk like), you can
ask Duncan Mac Gregor [2], Redline Smalltalk by James Ladd [3] and
Gravel Smalltalk by Wouter Gazendam [4].
I hope I've not forgotten somebody :)
Rémi
[1] http://www.drdobbs.com/jvm/rtalk-smalltalk-on-the-jvm/231500288
[2] http://www.infoq.com/news/2012/12/magik-jvm-port
[3] https://github.com/redline-smalltalk/redline-smalltalk
[4] https://github.com/gravel-st/gravel
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev