Допустим, UTF8 означает, что ваше 'a' составляет 2 байта / 8 бит.
Таким образом, из вашего теста можно предположить, что максимальная длина строки в движке Chromes JS составляет 4 455 000 000 символов, или ~ 8,3 ГБ в памяти.
Но, конечно, это не то, что происходит.У вас всего 4 ГБ ОЗУ, но, согласно рисункам, из ниоткуда появилось ~ 4298 МБ, и есть структуры самой переменной массива, а также Java-виртуальной машины и самого chrome, и т.д. и т.п.
Не говоря уже о том, чтовы нажимаете s + count, а не s, поэтому длина добавляемой строки увеличивается с увеличением количества цифр в счетчике.Если бы s было одинаковым, то его значение, скорее всего, было бы интернировано для экономии памяти движком V8.Для справки: число дополнительных символов, добавленных из-за переменной count и из-за нелинейного увеличения длины, составляет 9,7438,889 символов или 185,85 МБ данных.
Так что должно происходить что-то ещездесь.
Что касается ограничений двигателя V8 JS:
http://code.google.com/p/v8/issues/detail?id=847
32-разрядное адресное пространство памяти является верхним пределом, а для 64-разрядного эта ссылка предполагает~ 1,9 ГБ, хотя весьма вероятно, что это верхний предел возможностей вашей ОС и он физически доступен.
Итак, подведем итог:
- 32 бита всегда будет верхней границейне вашей конкретной переменной js, а всего пакета js VM, рендерера, содержимого страницы и т. д.
- Ваш тест не совсем надежен, поскольку подсчитываемые им элементы не идентичны
- Если бы они были идентичны, вы бы не справились со специальной обработкой строк
edit: