diff --git a/src/test/java/com/android/tools/r8/cf/DeserializeLambdaMethodsTest.java b/src/test/java/com/android/tools/r8/cf/DeserializeLambdaMethodsTest.java
index 5e53aa8..cf33d74 100644
--- a/src/test/java/com/android/tools/r8/cf/DeserializeLambdaMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/cf/DeserializeLambdaMethodsTest.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime;
 import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -19,6 +20,7 @@
 import com.google.common.collect.ImmutableList;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -51,8 +53,17 @@
         cfVmsToTest);
   }
 
-  private static final List<CfVm> cfVmsToTest =
-      ImmutableList.of(CfVm.JDK8, CfVm.JDK11, CfVm.JDK17, CfVm.JDK21, CfVm.JDK25, CfVm.JDK27);
+  private static final List<CfVm> cfVmsToTest = new ArrayList<>();
+
+  static {
+    // JDK 8 is not supported for testing on Windows.
+    if (!ToolHelper.isWindows()) {
+      cfVmsToTest.add(CfVm.JDK8);
+    }
+    cfVmsToTest.addAll(
+        ImmutableList.of(CfVm.JDK11, CfVm.JDK17, CfVm.JDK21, CfVm.JDK25, CfVm.JDK27));
+  }
+
   private static final Map<CfVm, Path> TEST_CLASS_FILES = new HashMap<>();
 
   @BeforeClass
diff --git a/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java b/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
index 6780a02..a29024e 100644
--- a/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
@@ -24,6 +24,7 @@
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -57,8 +58,17 @@
         getTestParameters().withAllRuntimesAndApiLevels().withNoneRuntime().build(), cfVmsToTest);
   }
 
-  private static final List<CfVm> cfVmsToTest =
-      ImmutableList.of(CfVm.JDK8, CfVm.JDK11, CfVm.JDK17, CfVm.JDK21, CfVm.JDK25, CfVm.JDK27);
+  private static final List<CfVm> cfVmsToTest = new ArrayList<>();
+
+  static {
+    // JDK 8 is not supported for testing on Windows.
+    if (!ToolHelper.isWindows()) {
+      cfVmsToTest.add(CfVm.JDK8);
+    }
+    cfVmsToTest.addAll(
+        ImmutableList.of(CfVm.JDK11, CfVm.JDK17, CfVm.JDK21, CfVm.JDK25, CfVm.JDK27));
+  }
+
   private static final Map<CfVm, Path> TEST_CLASS_FILES_SHARED = new HashMap<>();
   private static final Map<CfVm, Path> TEST_CLASS_FILES_DEX = new HashMap<>();
   private static final Map<CfVm, Path> TEST_CLASS_FILES_CF = new HashMap<>();
