Size in memory:
Start a flash app with
var a:Vector.<int> = new Vector.<int>(1024 * 1024);
Would result in a total memory use (System.totalMemory: including all the other junk)
System.totalMemory = 7 311 360
Start Over. now start with
var a:Vector.<int> = new Vector.<int>(1024 * 1024+1);
System.totalMemory = 7 315 456
Wow.. That’s a 4K jump for one int!
ok… lets add one more.
var a:Vector.<int> = new Vector.<int>(1024 * 1024+2);
System.totalMemory = 7 315 456
Exact same thing.. hmm
is it really caching a minimum of 4K for each allocation? A thousand elements caching? Nice 😉
Ok. Well that’s good to know.
So now let’s fill this array
var a:Vector.<int> = new Vector.<int>(1024 * 1024);
for (var i:int = 0; i <= 1024 * 1024; i++) { a[i] = 0 }
System.totalMemory = 8 364 032
WHAT!! That’s a 1 052 652 bytes (1 Mo) hole! ouchh
Ok… Start Over..
Let’s try to see what’s really happening in Tamarin:
Here is a little experiment:
private function InitializeArray() : void
{
var i:int = 0, myArray:Array = new Array();
for (i = 0; i < 100000; i++) { myArray[i] = i; }
}
private function InitializeArrayBackward() : void
{
var i:int = 0, myArray:Array = new Array();
for (i = 100000; i >=0; i--) { myArray[i] = i; }
}
When testing those two functions in GSkinner PerformanceTest, I get this:
InitializeArray : 11 ms
InitializeArrayBackward : 44 ms
There is something very important to understand when using the Array class.
If you read the Tamarin source code you will discover that Array is made of multiple things:
- ArrayObject is using two data structure at the same time
- 1: A dense array (like Vector class)
- 2: A HashTable (like Object class)
To simplify this text, lets use “DA” for “dense array” and “HT” for “HashTable”
I saw the use case made by GSkinner and it was funny to see the emergent pattern in there. so i modified a bit his test
to render it as Bitmap, and skip some frames so that we can see the final pattern really quickly.
Before talking about more technical stuff, i’m just going to complete a little bit my portfolio in here.