-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
First pass at making dyncalls from Java use call site caching.
This introduces a new class, JavaCallSites, which holds per- runtime call sites and function objects that cache better than our per-class caches. This improves the performance of core methods implemented with Java that need to make dynamic calls. This is a first step toward eventually getting those calls to use invokedynamic, which will require bytecode manpulation. This first commit also reworks Ruby.safeRecurse to accept a richer function object that also receives context and a generic state object. This will allow most safe-recursion guards to work without any allocation.
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
Showing
13 changed files
with
239 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package org.jruby.runtime; | ||
|
||
import org.jruby.Ruby; | ||
import org.jruby.runtime.builtin.IRubyObject; | ||
import org.jruby.runtime.callsite.FunctionalCachingCallSite; | ||
import org.jruby.runtime.callsite.RespondToCallSite; | ||
|
||
import static org.jruby.runtime.invokedynamic.MethodNames.OP_CMP; | ||
|
||
/** | ||
* A collection of all call sites used for dynamic calls from JRuby's Java code. | ||
*/ | ||
public class JavaCallSites { | ||
public final CallSite BO_respond_to = new FunctionalCachingCallSite("respond_to?"); | ||
public final CallSite BO_initialize_dup = new FunctionalCachingCallSite("initialize_dup"); | ||
public final CallSite BO_initialize_clone = new FunctionalCachingCallSite("initialize_clone"); | ||
|
||
public final RespondToCallSite STR_respond_to_to_str = new RespondToCallSite("to_str"); | ||
public final RespondToCallSite STR_respond_to_cmp = new RespondToCallSite("<=>"); | ||
public final CallSite STR_to_str = new FunctionalCachingCallSite("to_str"); | ||
public final CallSite STR_equals = new FunctionalCachingCallSite("=="); | ||
public final CallSite STR_cmp = new FunctionalCachingCallSite("<=>"); | ||
public final CallSite STR_hash = new FunctionalCachingCallSite("hash"); | ||
|
||
public final RespondToCallSite TIME_respond_to_cmp = new RespondToCallSite("<=>"); | ||
public final CallSite TIME_cmp = new FunctionalCachingCallSite("<=>"); | ||
|
||
public final Ruby.RecursiveFunctionEx STR_recursive_cmp = new Ruby.RecursiveFunctionEx<IRubyObject>() { | ||
@Override | ||
public IRubyObject call(ThreadContext context, IRubyObject recv, IRubyObject other, boolean recur) { | ||
if (recur || !context.sites.STR_respond_to_cmp.respondsTo(context, other, other)) return context.nil; | ||
return context.sites.STR_cmp.call(context, other, other, recv); | ||
} | ||
}; | ||
|
||
public final Ruby.RecursiveFunctionEx TIME_recursive_cmp = new Ruby.RecursiveFunctionEx<IRubyObject>() { | ||
@Override | ||
public IRubyObject call(ThreadContext context, IRubyObject recv, IRubyObject other, boolean recur) { | ||
if (recur || !context.sites.TIME_respond_to_cmp.respondsTo(context, other, other)) return context.nil; | ||
return context.sites.TIME_cmp.call(context, other, other, recv); | ||
} | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters