On 6/16/16 9:54 AM, MMJones wrote:
Suppose one has something like

class foo
{
   int[] x;
   void bar()
   {
      x = [];
   }
}

Does the GC trash the "cache" when calling bar or does it realize that
it can use the same memory for x and essentially just shortens the array?

If you reassign x, the compiler does not know enough context to assume nothing else has a reference to x's old data. So no, it would not re-use that same data.

Is it equivalent to setting length = 0?

Even this is not going to overwrite the data. You'd need to do:

x.length = 0;
x.assumeSafeAppend;

I'm a bit worried that setting a managed array to [] might cause a
completely new reallocation, which is unnecessary and undesirable.

Use assumeSafeAppend when you need to do this.

BTW, x = [] is equivalent to x = null. So this is most certainly going to cause a new allocation on the next append.

-Steve

Reply via email to