Closed
Description
Hello.
Pull request #635 removed special representation of concatenated strings.
While the change reduced memory usage and significantly improved performance for many cases, it also significantly increased memory consumption for other cases. For example:
var i = '0123456789ABCDEF';
for (j = 0; j < 12; j++)
{
i += i;
}
print (i[124]);
Please, see memory statistics for the following versions:
6697523 (base version) -> 3b0f61a (the patch)
- Heap stats:
- Peak allocated chunks count = 1037 -> 3081
- Peak allocated = 66292 -> 197108 bytes
- Peak waste = 199 -> 199 bytes
- Pools stats:
- Peak pools: 8 -> 2052
- Peak allocated chunks: 63 -> 16416
var i = '0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF';
var j = 'abcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnop';
var a = '';
for (k = 0; k < 16; k++)
{
if (k % 4 == 0)
{
a += (i + j);
}
else if (k % 2 == 0)
{
i += a;
}
else
{
j += a;
}
}
print (a[124]);
- Heap stats:
- Peak allocated chunks count = 367 -> 2533
- Peak allocated = 23420 -> 162044 bytes
- Peak waste = 191 -> 191 bytes
- Pools stats:
- Peak pools: 10 -> 1943
- Peak allocated chunks: 73 -> 15540
var i = '01';
var j = 'ab';
var a = '';
for (k = 0; k < 16; k++)
{
if (k % 4 == 0)
{
a += (i + j);
}
else if (k % 2 == 0)
{
i += a;
}
else
{
j += a;
}
}
print (a[124]);
- Heap stats:
- Peak allocated chunks count = 63 -> 92
- Peak allocated = 3843 -> 5766 bytes
- Peak waste = 191 -> 191 bytes
- Pools stats:
- Peak pools: 10 -> 56
- Peak allocated chunks: 75 -> 525
Please, see also the related conversation: https://github.com//pull/635#issuecomment-143723345