Skip to content

Investigation of possible reprentations of concatenated strings #648

Closed
@ruben-ayrapetyan

Description

@ruben-ayrapetyan

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions