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.recompilation;
014
015 import org.jikesrvm.adaptive.OnStackReplacementPlan;
016 import org.jikesrvm.adaptive.controller.Controller;
017 import org.jikesrvm.adaptive.controller.ControllerPlan;
018 import org.jikesrvm.scheduler.RVMThread;
019 import org.vmmagic.pragma.NonMoving;
020
021 /**
022 * This class is a separate thread whose job is to monitor a (priority)
023 * queue of compilation plans. Whenever the queue is nonempty, this
024 * thread will pick the highest priority compilation plan from the queue
025 * and invoke the OPT compiler to perform the plan.
026 *
027 * No intelligence is contained in this class. All policy decisions are
028 * made by the controllerThread.
029 */
030 @NonMoving
031 public final class CompilationThread extends RVMThread {
032
033 /**
034 * constructor
035 */
036 public CompilationThread() {
037 super("CompilationThread");
038 makeDaemon(true);
039 }
040
041 /**
042 * This is the main loop of the compilation thread. It's job is to
043 * remove controller plans from the compilation queue and perform
044 * them.
045 */
046 public void run() {
047 // Make a blocking call to deleteMin to get a plan and then execute it.
048 // Repeat...
049 while (true) {
050 Object plan = Controller.compilationQueue.deleteMin();
051 if (plan instanceof ControllerPlan) {
052 ((ControllerPlan) plan).doRecompile();
053 } else if (plan instanceof OnStackReplacementPlan) {
054 ((OnStackReplacementPlan) plan).execute();
055 }
056 }
057 }
058
059 }
060