If I iterate the following steps:

  auto contents = buffer->Externalize();
  buffer->Neuter();

  auto newBuffer = ArrayBuffer::New(isolate, contents.Data(), 
contents.ByteLength(),
                                    
v8::ArrayBufferCreationMode::kInternalized);

V8 repeatedly triggers full mark-and-sweep GC passes even though the size 
of the external heap is not increasing. This is because creating an 
internalized ArrayBuffer from existing memory adjusts v8s external heap 
estimate upward, but externalizing/neutering the same array does not appear 
to adjust that estimate downward. (See api.cc and runtime-typedarray.cc).

I have a reproduction using iojs-3.2.0 (v8 version 4.4.63) here: 
https://github.com/mlogan/arraybuffer-gc

This seems undesirable, although I can imagine there might be other cases 
where this is desirable behavior. Let me know if this should be considered 
a bug, I'm happy to file it.

Thanks,
Mark

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to