mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 07:44:48 -05:00
41c7e96f1a
* In order to prevent ArrayBuffers from getting garbage collected by V8, we used to store a v8::Persistent<ArrayBuffer> in a map. This patch introduces a custom ArrayBuffer allocator which doesn't use Persistent handles, but instead stores a pointer to the actual ArrayBuffer data alongside with a reference count. Since creating Persistent handles has quite a bit of overhead, this change significantly increases performance. Various HTTP server benchmarks report about 5-10% more requests per second than before. * Previously the Persistent handle that prevented garbage collection had to be released manually, and this wasn't always done, which was causing memory leaks. This has been resolved by introducing a new `PinnedBuf` type in both Rust and C++ that automatically re-enables garbage collection when it goes out of scope. * Zero-copy buffers are now correctly wrapped in an Option if there is a possibility that they're not present. This clears up a correctness issue where we were creating zero-length slices from a null pointer, which is against the rules. |
||
---|---|---|
.. | ||
api.cc | ||
binding.cc | ||
buffer.h | ||
BUILD.gn | ||
deno.h | ||
exceptions.cc | ||
exceptions.h | ||
file_util.cc | ||
file_util.h | ||
file_util_test.cc | ||
internal.h | ||
libdeno.d.ts | ||
libdeno_test.cc | ||
libdeno_test.js | ||
modules.cc | ||
modules_test.cc | ||
snapshot_creator.cc | ||
test.cc | ||
test.h |