diff --git a/tutorials/MoarRam/Android.mk b/tutorials/MoarRam/Android.mk
new file mode 100644
index 0000000..c3bace9
--- /dev/null
+++ b/tutorials/MoarRam/Android.mk
@@ -0,0 +1,31 @@
+# Copyright (C) 2013 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+# We only want this apk build for tests.
+LOCAL_MODULE_TAGS := optional
+
+# Include all test java files.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := MoarRam
+
+include $(BUILD_PACKAGE)
+
+include $(CLEAR_VARS)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tutorials/MoarRam/AndroidManifest.xml b/tutorials/MoarRam/AndroidManifest.xml
new file mode 100644
index 0000000..ae48ace
--- /dev/null
+++ b/tutorials/MoarRam/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.benchmark.moarram"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name="com.android.benchmark.moarram.MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>
diff --git a/tutorials/MoarRam/README.txt b/tutorials/MoarRam/README.txt
new file mode 100644
index 0000000..028389b
--- /dev/null
+++ b/tutorials/MoarRam/README.txt
@@ -0,0 +1,14 @@
+This is a simple app that can be used as a tutorial or reference benchmark
+for the development of the DDMS native heap tracker feature. It contains 3
+unique paths to allocate heap chunks:
+
+1) Java_com_android_benchmark_moarram_MainActivity_add32ByteBlocksNative in
+   foo.c (libmoarram-foo.so). Each invocation will allocate 32 bytes.
+2) Java_com_android_benchmark_moarram_MainActivity_add2MByteBlocksNative in
+   bar.c (libmoarram-bar.so). Each invocation will allocate 2M bytes.
+3) Java_com_android_benchmark_moarram_MainActivity_addVariableSizedBlocksNative
+   in baz.c (libmoarram-baz.so). Each invocation will allocate 17 or 71 bytes,
+   depending on the active button in a radio group.
+
+Each allocation can be freed by clicking the corresponding free button in the
+UI.
diff --git a/tutorials/MoarRam/jni/Android.mk b/tutorials/MoarRam/jni/Android.mk
new file mode 100644
index 0000000..933cbdf
--- /dev/null
+++ b/tutorials/MoarRam/jni/Android.mk
@@ -0,0 +1,43 @@
+# Copyright (C) 2013 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE    := libmoarram-32
+LOCAL_SRC_FILES := foo.c
+LOCAL_SHARED_LIBRARIES += liblog
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE    := libmoarram-2M
+LOCAL_SRC_FILES := bar.c
+LOCAL_SHARED_LIBRARIES += liblog
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE    := libmoarram-17_71
+LOCAL_SRC_FILES := baz.c
+LOCAL_SHARED_LIBRARIES += liblog
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/tutorials/MoarRam/jni/bar.c b/tutorials/MoarRam/jni/bar.c
new file mode 100644
index 0000000..7b00e62
--- /dev/null
+++ b/tutorials/MoarRam/jni/bar.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2013 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.
+ *
+ */
+
+#include <jni.h>
+#include <cutils/log.h>
+
+#if defined(LOG_TAG)
+#undef LOG_TAG
+#define LOG_TAG "MOARRAM"
+#endif
+
+char *gPtr2;
+static int num2MByteBlocks;
+
+void
+Java_com_android_benchmark_moarram_MainActivity_add2MByteBlocksNative(
+    JNIEnv*  env,
+    jobject  this)
+{
+    char **ptr = malloc(2*1024*1024);
+    *ptr = gPtr2;
+    gPtr2 = (char *) ptr;
+    num2MByteBlocks++;
+    ALOGW("%d 2M-byte blocks allocated so far (just allocated %p)",
+          num2MByteBlocks, gPtr2);
+}
+
+void
+Java_com_android_benchmark_moarram_MainActivity_free2MByteBlocksNative(
+    JNIEnv*  env,
+    jobject  this)
+{
+    if (gPtr2 == NULL) {
+        ALOGW("All 2M-byte blocks are freed");
+        return;
+    }
+
+    char **ptr = (char **) gPtr2;
+    gPtr2 = *ptr;
+    free(ptr);
+    num2MByteBlocks--;
+    ALOGW("%d 2M-byte blocks allocated so far (just freed %p)",
+          num2MByteBlocks, ptr);
+}
diff --git a/tutorials/MoarRam/jni/baz.c b/tutorials/MoarRam/jni/baz.c
new file mode 100644
index 0000000..1262e40
--- /dev/null
+++ b/tutorials/MoarRam/jni/baz.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2013 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.
+ *
+ */
+
+#include <jni.h>
+#include <cutils/log.h>
+
+#if defined(LOG_TAG)
+#undef LOG_TAG
+#define LOG_TAG "MOARRAM"
+#endif
+
+char *gPtr17;
+char *gPtr71;
+static int num17ByteBlocks;
+static int num71ByteBlocks;
+
+void
+Java_com_android_benchmark_moarram_MainActivity_addVariableSizedBlocksNative(
+    JNIEnv*  env,
+    jobject  this,
+    jint id)
+{
+    int size;
+    char **gPtr;
+    char **ptr;
+    if (id == 0) {
+        size = 17;
+        gPtr = &gPtr17;
+    } else {
+        size = 71;
+        gPtr = &gPtr71;
+    }
+    ptr = malloc(size);
+    *ptr = *gPtr;
+    *gPtr = (char *) ptr;
+    ALOGW("%d %d-byte blocks allocated so far (just allocated %p)",
+          id == 0 ? ++num17ByteBlocks : ++num71ByteBlocks,
+          size, ptr);
+}
+
+void
+Java_com_android_benchmark_moarram_MainActivity_freeVariableSizedBlocksNative(
+    JNIEnv*  env,
+    jobject  this,
+    jint id)
+{
+    int size;
+    char **ptr;
+    char **gPtr;
+    if (id == 0) {
+        size = 17;
+        gPtr = &gPtr17;
+    } else {
+        size = 71;
+        gPtr = &gPtr71;
+    }
+    if (*gPtr == NULL) {
+        ALOGW("All %d-byte blocks are freed", size);
+        return;
+    }
+    ptr = (char **) *gPtr;
+    *gPtr = *ptr;
+    free(ptr);
+    ALOGW("%d %d-byte blocks allocated so far (just freed %p)",
+          id == 0 ? --num17ByteBlocks : --num71ByteBlocks,
+          size, ptr);
+}
diff --git a/tutorials/MoarRam/jni/foo.c b/tutorials/MoarRam/jni/foo.c
new file mode 100644
index 0000000..a318c74
--- /dev/null
+++ b/tutorials/MoarRam/jni/foo.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2013 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.
+ *
+ */
+
+#include <jni.h>
+#include <cutils/log.h>
+
+#if defined(LOG_TAG)
+#undef LOG_TAG
+#define LOG_TAG "MOARRAM"
+#endif
+
+char *gPtr;
+static int num32ByteBlocks;
+
+void
+Java_com_android_benchmark_moarram_MainActivity_add32ByteBlocksNative(
+    JNIEnv*  env,
+    jobject  this)
+{
+    char **ptr = malloc(32);
+    *ptr = gPtr;
+    gPtr = (char *) ptr;
+    num32ByteBlocks++;
+    ALOGW("%d 32-byte blocks allocated so far (just allocated %p)",
+          num32ByteBlocks, gPtr);
+}
+
+void
+Java_com_android_benchmark_moarram_MainActivity_free32ByteBlocksNative(
+    JNIEnv*  env,
+    jobject  this)
+{
+    if (gPtr == NULL) {
+        ALOGW("All 32-byte blocks are freed");
+        return;
+    }
+
+    char **ptr = (char **) gPtr;
+    gPtr = *ptr;
+    free(ptr);
+    num32ByteBlocks--;
+    ALOGW("%d 32-byte blocks allocated so far (just freed %p)",
+          num32ByteBlocks, ptr);
+}
diff --git a/tutorials/MoarRam/res/drawable-hdpi/ic_launcher.png b/tutorials/MoarRam/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..288b665
--- /dev/null
+++ b/tutorials/MoarRam/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/tutorials/MoarRam/res/drawable-mdpi/ic_launcher.png b/tutorials/MoarRam/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..6ae570b
--- /dev/null
+++ b/tutorials/MoarRam/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/tutorials/MoarRam/res/drawable-xhdpi/ic_launcher.png b/tutorials/MoarRam/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..d4fb7cd
--- /dev/null
+++ b/tutorials/MoarRam/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/tutorials/MoarRam/res/drawable-xxhdpi/ic_launcher.png b/tutorials/MoarRam/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..85a6081
--- /dev/null
+++ b/tutorials/MoarRam/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/tutorials/MoarRam/res/layout/activity_main.xml b/tutorials/MoarRam/res/layout/activity_main.xml
new file mode 100644
index 0000000..8319bd7
--- /dev/null
+++ b/tutorials/MoarRam/res/layout/activity_main.xml
@@ -0,0 +1,104 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="fill_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    android:orientation="vertical"
+    tools:context=".MainActivity" >
+
+    <LinearLayout
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:layout_weight="1"
+    android:orientation="horizontal">
+
+    <Button
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:text="@string/add_32"
+        android:layout_weight="1"
+        android:onClick="add32ByteBlocks" />
+
+    <Button
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:text="@string/free_32"
+        android:layout_weight="1"
+        android:onClick="free32ByteBlocks" />
+    </LinearLayout>
+
+    <LinearLayout
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:layout_weight="1"
+    android:orientation="horizontal">
+
+    <Button
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:text="@string/add_2m"
+        android:layout_weight="1"
+        android:onClick="add2MByteBlocks" />
+
+    <Button
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:text="@string/free_2m"
+        android:layout_weight="1"
+        android:onClick="free2MByteBlocks" />
+    </LinearLayout>
+
+    <LinearLayout
+    android:id="@+id/linearLayout2"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:layout_weight="1"
+    android:orientation="horizontal">
+
+    <RadioGroup
+        android:id="@+id/blockSize"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:orientation="horizontal"
+        android:gravity="center" >
+
+        <RadioButton
+        android:id="@+id/radio17"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/_17byte"
+        android:checked="true" />
+
+        <RadioButton
+        android:id="@+id/radio71"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/_71byte" />
+    </RadioGroup>
+    </LinearLayout>
+
+    <LinearLayout
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:layout_weight="1"
+    android:orientation="horizontal">
+
+    <Button
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:text="@string/add_variable"
+        android:layout_weight="1"
+        android:onClick="addVariableSizedBlocks" />
+
+    <Button
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:text="@string/free_variable"
+        android:layout_weight="1"
+        android:onClick="freeVariableSizedBlocks" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/tutorials/MoarRam/res/menu/main.xml b/tutorials/MoarRam/res/menu/main.xml
new file mode 100644
index 0000000..d227c49
--- /dev/null
+++ b/tutorials/MoarRam/res/menu/main.xml
@@ -0,0 +1,9 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <item
+        android:id="@+id/action_settings"
+        android:orderInCategory="100"
+        android:showAsAction="never"
+        android:title="@string/action_settings"/>
+
+</menu>
\ No newline at end of file
diff --git a/tutorials/MoarRam/res/values-sw600dp/dimens.xml b/tutorials/MoarRam/res/values-sw600dp/dimens.xml
new file mode 100644
index 0000000..1ba777d
--- /dev/null
+++ b/tutorials/MoarRam/res/values-sw600dp/dimens.xml
@@ -0,0 +1,8 @@
+<resources>
+
+    <!--
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw600dp devices (e.g. 7" tablets) here.
+    -->
+
+</resources>
\ No newline at end of file
diff --git a/tutorials/MoarRam/res/values-sw720dp-land/dimens.xml b/tutorials/MoarRam/res/values-sw720dp-land/dimens.xml
new file mode 100644
index 0000000..eee741a
--- /dev/null
+++ b/tutorials/MoarRam/res/values-sw720dp-land/dimens.xml
@@ -0,0 +1,9 @@
+<resources>
+
+    <!--
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    -->
+    <dimen name="activity_horizontal_margin">128dp</dimen>
+
+</resources>
\ No newline at end of file
diff --git a/tutorials/MoarRam/res/values-v11/styles.xml b/tutorials/MoarRam/res/values-v11/styles.xml
new file mode 100644
index 0000000..541752f
--- /dev/null
+++ b/tutorials/MoarRam/res/values-v11/styles.xml
@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>
\ No newline at end of file
diff --git a/tutorials/MoarRam/res/values-v14/styles.xml b/tutorials/MoarRam/res/values-v14/styles.xml
new file mode 100644
index 0000000..f20e015
--- /dev/null
+++ b/tutorials/MoarRam/res/values-v14/styles.xml
@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>
\ No newline at end of file
diff --git a/tutorials/MoarRam/res/values/dimens.xml b/tutorials/MoarRam/res/values/dimens.xml
new file mode 100644
index 0000000..a6dd140
--- /dev/null
+++ b/tutorials/MoarRam/res/values/dimens.xml
@@ -0,0 +1,7 @@
+<resources>
+
+    <!-- Default screen margins, per the Android Design guidelines. -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+
+</resources>
\ No newline at end of file
diff --git a/tutorials/MoarRam/res/values/strings.xml b/tutorials/MoarRam/res/values/strings.xml
new file mode 100644
index 0000000..0c0031d
--- /dev/null
+++ b/tutorials/MoarRam/res/values/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">MoarRam</string>
+    <string name="action_settings">Settings</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="enter_num">Enter a number</string>
+    <string name="add_32">Add 32 bytes</string>
+    <string name="free_32">Free 32 bytes</string>
+    <string name="add_2m">Add 2M bytes</string>
+    <string name="free_2m">Free 2M bytes</string>
+    <string name="add_variable">Add 17 or 71 bytes</string>
+    <string name="free_variable">Free 17 or 71 bytes</string>
+    <string name="_17byte">17 bytes</string>
+    <string name="_71byte">71 bytes</string>
+</resources>
diff --git a/tutorials/MoarRam/res/values/styles.xml b/tutorials/MoarRam/res/values/styles.xml
new file mode 100644
index 0000000..4a10ca4
--- /dev/null
+++ b/tutorials/MoarRam/res/values/styles.xml
@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>
\ No newline at end of file
diff --git a/tutorials/MoarRam/src/com/android/benchmark/moarram/MainActivity.java b/tutorials/MoarRam/src/com/android/benchmark/moarram/MainActivity.java
new file mode 100644
index 0000000..aa83b8c
--- /dev/null
+++ b/tutorials/MoarRam/src/com/android/benchmark/moarram/MainActivity.java
@@ -0,0 +1,64 @@
+package com.android.benchmark.moarram;
+
+import android.os.Bundle;
+import android.app.Activity;
+import android.view.Menu;
+import android.view.View;
+import android.widget.RadioGroup;
+
+public class MainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        System.loadLibrary("moarram-32");
+        System.loadLibrary("moarram-2M");
+        System.loadLibrary("moarram-17_71");
+        setContentView(R.layout.activity_main);
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.main, menu);
+        return true;
+    }
+
+    public void add32ByteBlocks(View view) {
+        add32ByteBlocksNative();
+    }
+
+    public void free32ByteBlocks(View view) {
+        free32ByteBlocksNative();
+    }
+
+    public void add2MByteBlocks(View view) {
+        add2MByteBlocksNative();
+    }
+
+    public void free2MByteBlocks(View view) {
+        free2MByteBlocksNative();
+    }
+
+    public void addVariableSizedBlocks(View view) {
+
+        RadioGroup sizeGroup = (RadioGroup) findViewById(R.id.blockSize);
+
+        int sizeId = sizeGroup.getCheckedRadioButtonId();
+        addVariableSizedBlocksNative(sizeId == R.id.radio17 ? 0 : 1);
+    }
+
+    public void freeVariableSizedBlocks(View view) {
+
+        RadioGroup sizeGroup = (RadioGroup) findViewById(R.id.blockSize);
+
+        int sizeId = sizeGroup.getCheckedRadioButtonId();
+        freeVariableSizedBlocksNative(sizeId == R.id.radio17 ? 0 : 1);
+    }
+
+    public native void add32ByteBlocksNative();
+    public native void free32ByteBlocksNative();
+    public native void add2MByteBlocksNative();
+    public native void free2MByteBlocksNative();
+    public native void addVariableSizedBlocksNative(int sizeId);
+    public native void freeVariableSizedBlocksNative(int sizeId);
+}
