diff --git a/test/102-concurrent-gc/src/Main.java b/test/102-concurrent-gc/src/Main.java
new file mode 100644
index 0000000..1a9e88e
--- /dev/null
+++ b/test/102-concurrent-gc/src/Main.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2012 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.Random;
+
+public class Main {
+    private static final int buckets = 16 * 1024;
+    private static final int bufferSize = 1024;
+
+    static class ByteContainer {
+        public byte[] bytes;
+    }
+
+    public static void main(String[] args) throws Exception {
+        try {
+            ByteContainer[] l = new ByteContainer[buckets];
+
+            for (int i = 0; i < buckets; ++i) {
+                l[i] = new ByteContainer();
+            }
+
+            Random rnd = new Random(123456);
+            for (int i = 0; i < buckets / 256; ++i) {
+                int index = rnd.nextInt(buckets);
+                l[index].bytes = new byte[bufferSize];
+
+                // Try to get GC to run if we can
+                Runtime.getRuntime().gc();
+
+                // Shuffle the array to try cause the lost object problem:
+                // This problem occurs when an object is white, it may be
+                // only referenced from a white or grey object. If the white
+                // object is moved during a CMS to be a black object's field, it
+                // causes the moved object to not get marked. This can result in
+                // heap corruption. A typical way to address this issue is by
+                // having a card table.
+                // This aspect of the test is meant to ensure that card
+                // dirtying works and that we check the marked cards after
+                // marking.
+                // If these operations are not done, a segfault / failed assert
+                // should occur.
+                for (int j = 0; j < l.length; ++j) {
+                    int a = l.length - i - 1;
+                    int b = rnd.nextInt(a);
+                    byte[] temp = l[a].bytes;
+                    l[a].bytes = l[b].bytes;
+                    l[b].bytes = temp;
+                }
+            }
+        } catch (OutOfMemoryError e) {
+        }
+        System.out.println("Test complete");
+    }
+}
