001 /* 002 * This file is part of the Jikes RVM project (http://jikesrvm.org). 003 * 004 * This file is licensed to You under the Eclipse Public License (EPL); 005 * You may not use this file except in compliance with the License. You 006 * may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/eclipse-1.0.php 009 * 010 * See the COPYRIGHT.txt file distributed with this work for information 011 * regarding copyright ownership. 012 */ 013 package org.jikesrvm.adaptive.controller; 014 015 import org.jikesrvm.classloader.NormalMethod; 016 import org.jikesrvm.compilers.common.CompiledMethod; 017 018 /** 019 * A recompilation choice represents an action (or a set of actions) 020 * that can be considered by the controller's analytic model. 021 */ 022 abstract class RecompilationChoice { 023 024 //--- Interface --- 025 026 /** 027 * What is the cost of selecting this recompilation choice? 028 * 029 * @param meth The method being considered for recompilation. 030 * @return The expected cost of executing this recompilation choice 031 */ 032 abstract double getCost(NormalMethod meth); 033 034 /** 035 * What is the benefit of executing this recompilation choice, given 036 * the estimated future time for the method if nothing changes? 037 * 038 * @param prevCompiler The previous compiler 039 * @param futureExecutionTime The expected future execution time of 040 * the method if left running with the previous compiler. 041 * @return The expected future execution time if this choice were selected 042 */ 043 abstract double getFutureExecutionTime(int prevCompiler, double futureExecutionTime); 044 045 /** 046 * Return a controller plan that will start this recompilation choice 047 * in action. 048 * 049 * @param cmpMethod The method in question 050 * @param prevCompiler The previous compiler 051 * @param prevTimeFormethod The estimated future time had nothing been done 052 * @param bestActionTime The estimated total time implementing this choice 053 * @param bestCost The estimated compilation cost implementing this choice 054 * @return The controller plan implementing this recompilation choice 055 */ 056 abstract ControllerPlan makeControllerPlan(CompiledMethod cmpMethod, int prevCompiler, double prevTimeFormethod, 057 double bestActionTime, double bestCost); 058 059 } 060 061 062 063 064 065 066