diff --git a/libcore/tools/runner/java/dalvik/runner/DalvikRunner.java b/libcore/tools/runner/java/dalvik/runner/DalvikRunner.java
index 5c5075a..84d54ef 100644
--- a/libcore/tools/runner/java/dalvik/runner/DalvikRunner.java
+++ b/libcore/tools/runner/java/dalvik/runner/DalvikRunner.java
@@ -41,6 +41,7 @@
     private Set<File> expectationFiles = new LinkedHashSet<File>();
     private File xmlReportsDirectory;
     private String javaHome;
+    private List<String> vmArgs = new ArrayList<String>();
     private boolean clean = true;
     private String deviceRunnerDir = "/sdcard/dalvikrunner";
     private List<File> testFiles = new ArrayList<File>();
@@ -99,6 +100,9 @@
             } else if ("--verbose".equals(args[i])) {
                 Logger.getLogger("dalvik.runner").setLevel(Level.FINE);
 
+            } else if ("--vm-arg".equals(args[i])) {
+                vmArgs.add(args[++i]);
+
             } else if ("--xml-reports-directory".equals(args[i])) {
                 xmlReportsDirectory = new File(args[++i]);
                 if (!xmlReportsDirectory.isDirectory()) {
@@ -163,6 +167,9 @@
         System.out.println("      test before the runner aborts it.");
         System.out.println("      Default is: " + timeoutSeconds);
         System.out.println();
+        System.out.println("  --vm-arg <argument>: include the specified argument when spawning a");
+        System.out.println("      virtual machine. Examples: -Xint:fast, -ea, -Xmx16M");
+        System.out.println();
         System.out.println("  --xml-reports-directory <path>: directory to emit JUnit-style");
         System.out.println("      XML test results.");
         System.out.println();
@@ -172,9 +179,10 @@
 
     private void run() throws Exception {
         Vm vm = javaHome != null
-                ? new JavaVm(debugPort, timeoutSeconds, sdkJar, localTemp, javaHome, clean)
-                : new DeviceDalvikVm(debugPort, timeoutSeconds, sdkJar, localTemp,
-                        clean, deviceRunnerDir);
+                ? new JavaVm(debugPort, timeoutSeconds, sdkJar, localTemp,
+                        javaHome, vmArgs, clean)
+                : new DeviceDalvikVm(debugPort, timeoutSeconds, sdkJar,
+                        localTemp, vmArgs, clean, deviceRunnerDir);
         List<CodeFinder> codeFinders = Arrays.asList(
                 new JtregFinder(localTemp),
                 new JUnitFinder(),
diff --git a/libcore/tools/runner/java/dalvik/runner/DeviceDalvikVm.java b/libcore/tools/runner/java/dalvik/runner/DeviceDalvikVm.java
index d95e948..47db11f 100644
--- a/libcore/tools/runner/java/dalvik/runner/DeviceDalvikVm.java
+++ b/libcore/tools/runner/java/dalvik/runner/DeviceDalvikVm.java
@@ -17,6 +17,7 @@
 package dalvik.runner;
 
 import java.io.File;
+import java.util.List;
 import java.util.logging.Logger;
 
 /**
@@ -36,9 +37,9 @@
 
     private final Adb adb = new Adb();
 
-    DeviceDalvikVm(Integer debugPort, long timeoutSeconds,
-            File sdkJar, File localTemp, boolean clean, String runnerDir) {
-        super(debugPort, timeoutSeconds, sdkJar, localTemp, clean);
+    DeviceDalvikVm(Integer debugPort, long timeoutSeconds, File sdkJar,
+            File localTemp, List<String> additionalVmArgs, boolean clean, String runnerDir) {
+        super(debugPort, timeoutSeconds, sdkJar, localTemp, additionalVmArgs, clean);
 
         this.runnerDir = new File(runnerDir);
         this.testTemp = new File(this.runnerDir, "/tests.tmp");
diff --git a/libcore/tools/runner/java/dalvik/runner/JavaVm.java b/libcore/tools/runner/java/dalvik/runner/JavaVm.java
index c1eab3e..8b53477 100644
--- a/libcore/tools/runner/java/dalvik/runner/JavaVm.java
+++ b/libcore/tools/runner/java/dalvik/runner/JavaVm.java
@@ -17,6 +17,7 @@
 package dalvik.runner;
 
 import java.io.File;
+import java.util.List;
 
 /**
  * A local Java virtual machine like Harmony or the RI.
@@ -25,9 +26,9 @@
 
     private final String javaHome;
 
-    JavaVm(Integer debugPort, long timeoutSeconds, File sdkJar,
-            File localTemp, String javaHome, boolean clean) {
-        super(debugPort, timeoutSeconds, sdkJar, localTemp, clean);
+    JavaVm(Integer debugPort, long timeoutSeconds, File sdkJar, File localTemp,
+            String javaHome, List<String> additionalVmArgs, boolean clean) {
+        super(debugPort, timeoutSeconds, sdkJar, localTemp, additionalVmArgs, clean);
         this.javaHome = javaHome;
     }
 
diff --git a/libcore/tools/runner/java/dalvik/runner/Strings.java b/libcore/tools/runner/java/dalvik/runner/Strings.java
index 741af18..e696841 100644
--- a/libcore/tools/runner/java/dalvik/runner/Strings.java
+++ b/libcore/tools/runner/java/dalvik/runner/Strings.java
@@ -20,8 +20,8 @@
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.InputStreamReader;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Iterator;
diff --git a/libcore/tools/runner/java/dalvik/runner/Vm.java b/libcore/tools/runner/java/dalvik/runner/Vm.java
index 52bf5f6..3d66fce 100644
--- a/libcore/tools/runner/java/dalvik/runner/Vm.java
+++ b/libcore/tools/runner/java/dalvik/runner/Vm.java
@@ -19,7 +19,9 @@
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -61,6 +63,7 @@
             = Executors.newFixedThreadPool(1, Threads.daemonThreadFactory());
 
     protected final Integer debugPort;
+    protected final List<String> additionalVmArgs;
     protected final long timeoutSeconds;
     protected final File sdkJar;
     protected final File localTemp;
@@ -70,11 +73,12 @@
     private Classpath testRunnerClasses;
 
     Vm(Integer debugPort, long timeoutSeconds, File sdkJar, File localTemp,
-            boolean clean) {
+            List<String> additionalVmArgs, boolean clean) {
         this.debugPort = debugPort;
         this.timeoutSeconds = timeoutSeconds;
         this.sdkJar = sdkJar;
         this.localTemp = localTemp;
+        this.additionalVmArgs = additionalVmArgs;
         this.clean = clean;
     }
 
@@ -230,6 +234,7 @@
                 .classpath(getRuntimeSupportClasspath())
                 .userDir(testRun.getUserDir())
                 .debugPort(debugPort)
+                .vmArgs(additionalVmArgs)
                 .mainClass(testRun.getTestRunner().getName())
                 .build();
 
@@ -305,7 +310,7 @@
         private Integer debugPort;
         private String mainClass;
         private List<String> vmCommand = Collections.singletonList("java");
-        private List<String> vmArgs = Collections.emptyList();
+        private List<String> vmArgs = new ArrayList<String>();
 
         public VmCommandBuilder vmCommand(String... vmCommand) {
             this.vmCommand = Arrays.asList(vmCommand.clone());
@@ -343,7 +348,11 @@
         }
 
         public VmCommandBuilder vmArgs(String... vmArgs) {
-            this.vmArgs = Arrays.asList(vmArgs.clone());
+            return vmArgs(Arrays.asList(vmArgs));
+        }
+
+        public VmCommandBuilder vmArgs(Collection<String> vmArgs) {
+            this.vmArgs.addAll(vmArgs);
             return this;
         }
 
