org.jikesrvm.adaptive.database.callgraph
Class WeightedCallTargets

java.lang.Object
  extended by org.jikesrvm.adaptive.database.callgraph.WeightedCallTargets
Direct Known Subclasses:
WeightedCallTargets.MultiTarget, WeightedCallTargets.SingleTarget

public abstract class WeightedCallTargets
extends Object

A collection of weighted call targets. Depending on the size of the callee set, we use different subclasses that optimize the time/space tradeoffs.


Nested Class Summary
private static class WeightedCallTargets.MultiTarget
          An implementation for storing a call site distribution that has multiple targets.
private static class WeightedCallTargets.SingleTarget
          An implementation for storing a call site distribution that has a single target.
static interface WeightedCallTargets.Visitor
          Used by visitTargets
 
Constructor Summary
WeightedCallTargets()
           
 
Method Summary
abstract  WeightedCallTargets augmentCount(RVMMethod target, double amount)
          Augment the weight associated with the argument method by the argument amount.
static WeightedCallTargets create(RVMMethod target, double weight)
           
abstract  void decay(double rate)
          Decay the weights of all call targets by the specified amount
abstract  WeightedCallTargets filter(RVMMethod goal, boolean isPrecise)
           
 WeightedCallTargets incrementCount(RVMMethod target)
          Augment the weight associated with the argument method by 1.
abstract  double totalWeight()
          totalWeight of all call targets
abstract  void visitTargets(WeightedCallTargets.Visitor func)
          Iterate over all of the targets, evaluating the argument function on each edge.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

WeightedCallTargets

public WeightedCallTargets()
Method Detail

visitTargets

public abstract void visitTargets(WeightedCallTargets.Visitor func)
Iterate over all of the targets, evaluating the argument function on each edge.

NOTE: We guarantee that the targets will be iterated in monotonically decreasing edge weight. This simplifies the coding of the inlining clients that consume this information.

Parameters:
func - the function to evaluate on each target

incrementCount

public final WeightedCallTargets incrementCount(RVMMethod target)
Augment the weight associated with the argument method by 1.

NOTE: This method may change the representation of the target method. The caller must be sure to update their backing store of WeightedCallTargets accordingly to avoid losing the update.


augmentCount

public abstract WeightedCallTargets augmentCount(RVMMethod target,
                                                 double amount)
Augment the weight associated with the argument method by the argument amount. NOTE: This method may change the representation of the target method. The caller must be sure to update their backing store of WeightedCallTargets accordingly to avoid losing the update.


decay

public abstract void decay(double rate)
Decay the weights of all call targets by the specified amount

Parameters:
rate - the value to decay by

totalWeight

public abstract double totalWeight()
totalWeight of all call targets


filter

public abstract WeightedCallTargets filter(RVMMethod goal,
                                           boolean isPrecise)
Parameters:
goal - RVMMethod that is the statically possible target
isPrecise - whether or not goal is a precise target, or should be interpreted as being the root of a virtual method family, any of which are statically possible.
Returns:
the filtered call targets or null if no such target exists

create

public static WeightedCallTargets create(RVMMethod target,
                                         double weight)