A few students of mine have been wondering about checking how much memory is being used on Android (using Processing) for their games, so I came up with a simple sketch that uses some built-in Android Debug features (reference here):
<span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">void setup()</span>
<pre>{
size(480, 800, A3D);
orientation(PORTRAIT);
long heapStart = android.os.Debug.getNativeHeapAllocatedSize();
println("HEAP START:" + heapStart);
println("FREE: " + android.os.Debug.getNativeHeapFreeSize() );
PImage p = loadImage("spore.png");
long heapSize1 = android.os.Debug.getNativeHeapAllocatedSize();
println("HEAP START[spore]:" + heapSize1 + " : " + (heapSize1-heapStart));
println("FREE: " + android.os.Debug.getNativeHeapFreeSize() );
// load another image into the old one
p = loadImage("scissors.png");
long heapSize2 = android.os.Debug.getNativeHeapAllocatedSize();
println("HEAP START[spore,scissors]:" + heapSize2 + " : " + (heapSize2-heapSize1));
println("FREE: " + android.os.Debug.getNativeHeapFreeSize() );
// NOTE that memory still increases - the 1st is not garbage collected!
// remove images - both should be garbage collected and removed from heap
p = null;
long heapSize3 = android.os.Debug.getNativeHeapAllocatedSize();
println("HEAP START[spore]:" + heapSize3 + " : " + (heapSize3-heapSize2));
println("FREE: " + android.os.Debug.getNativeHeapFreeSize() );
noLoop();
}
void draw()
{
}