diff --git a/test/080-oom-throw-with-finalizer/src/Main.java b/test/080-oom-throw-with-finalizer/src/Main.java
new file mode 100644
index 0000000..57e9721
--- /dev/null
+++ b/test/080-oom-throw-with-finalizer/src/Main.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Vector;
+
+public class Main {
+    static char [][] holder;
+
+    static class ArrayMemEater {
+        static boolean sawOome;
+
+        static void blowup(char[][] holder) {
+            try {
+                for (int i = 0; i < holder.length; ++i) {
+                    holder[i] = new char[1024 * 1024];
+                }
+            } catch (OutOfMemoryError oome) {
+                ArrayMemEater.sawOome = true;
+            }
+        }
+    }
+
+    static class InstanceFinalizerMemEater {
+        public void finalize() {}
+    }
+
+    static boolean triggerArrayOOM(char[][] holder) {
+        ArrayMemEater.blowup(holder);
+        return ArrayMemEater.sawOome;
+    }
+
+    static boolean triggerInstanceFinalizerOOM() {
+        boolean sawOome = false;
+        try {
+            Vector v = new Vector();
+            while (true) {
+                v.add(new InstanceFinalizerMemEater());
+            }
+        } catch (OutOfMemoryError e) {
+            sawOome = true;
+        }
+        return sawOome;
+    }
+
+    public static void main(String[] args) {
+        // Keep holder alive to make instance OOM happen faster.
+        holder = new char[128 * 1024][];
+        if (!triggerArrayOOM(holder)) {
+            System.out.println("NEW_ARRAY did not throw OOME");
+        }
+
+        if (!triggerInstanceFinalizerOOM()) {
+            System.out.println("NEW_INSTANCE (finalize) did not throw OOME");
+        }
+
+        System.runFinalization();
+    }
+}
