Под хранением на стеке, я имею ввиду то что вне зависимости от того сколько раз был вызван конструктор у простого типа, память в куче под него не выделяется, так как она уже была выделена на стеке и в константном пуле

Код AS3:
var classes:Vector.<Class> = new <Class>[Array, Object, Dictionary, int, uint, Number, String, Boolean];
for each (var cls:Class in classes)
{
var memory:int = System.totalMemory;
for(var i:int = 0; i < 100000; i++)
{
var j:Object = new cls();
}
trace(cls, System.totalMemory - memory);
System.gc();
}
/*
[class Array] 151552
[class Object] 12288
[class Dictionary] 548864
[class int] 0
[class uint] 0
[class Number] 0
[class String] 0
[class Boolean] 0
значения не показательные, лучше смотреть в Scout
*/
это можно понять по спецификации
AVM2
Добавлено через 5 часов 26 минут
Цитата:
Сообщение от caseyryan
Во многих других языках примитивы "настоящие", не унаследованы от Object. Поэтому назвать их полноценными примитивами здесь, никак нельзя.
С полноценными примитивами, такая конструкция не прокатит без обертки
|
Во многих других языках так же есть возможность boxing/unboxing примитивных типов в базовый тип и складывается впечатление что все примитивные типы наследники Object.
C#

Код:
void doSomething(Object obj)
{
int resultVar = (int)obj;
}
int someVar = 1;
print(someVar is Object); //True
doSomething(someVar);
Тоже самое что кажется что int наследник Number,

Код AS3:
var a:int = 1;
trace (a is Number); //true
хотя наследником он быть не может