openbsd-ports/www/node/patches/patch-deps_v8_src_heap_cc
robert c480666f7d Instead of reserving 32MB of virtual memory let's reserve the quarter of
RLIMIT_DATA (ulimit -d) if RLIMIT_DATA is not 0 (unlimited).
If RLIMIT_DATA is 0 then the default 512MB reservation will be used.
Using 32MB made v8 use less memory for sure but it was a huge performance
loss too.
2011-06-02 07:21:14 +00:00

34 lines
1.6 KiB
Plaintext

$OpenBSD: patch-deps_v8_src_heap_cc,v 1.3 2011/06/02 07:21:14 robert Exp $
--- deps/v8/src/heap.cc.orig Sat May 21 04:40:06 2011
+++ deps/v8/src/heap.cc Wed Jun 1 14:26:51 2011
@@ -4503,6 +4503,29 @@ bool Heap::ConfigureHeap(int max_semispace_size,
initial_semispace_size_ = Min(initial_semispace_size_, max_semispace_size_);
external_allocation_limit_ = 10 * max_semispace_size_;
+ intptr_t max_virtual = OS::MaxVirtualMemory();
+
+ if (max_virtual > 0) {
+ intptr_t half = max_virtual >> 1;
+ intptr_t quarter = max_virtual >> 2;
+ // If we have limits on the amount of virtual memory we can use then we may
+ // be forced to lower the allocation limits. We reserve one quarter of the
+ // memory for young space and off-heap data. The rest is distributed as
+ // described below.
+ if (code_range_size_ > 0) {
+ // Reserve a quarter of the memory for the code range. The old space
+ // heap gets the remaining half. There is some unavoidable double
+ // counting going on here since the heap size is measured in committed
+ // virtual memory and the code range is only reserved virtual memory.
+ code_range_size_ = Min(code_range_size_, quarter);
+ max_old_generation_size_ = Min(max_old_generation_size_, half);
+ } else {
+ // Reserve three quarters of the memory for the old space heap including
+ // the executable code.
+ max_old_generation_size_ = Min(max_old_generation_size_, half + quarter);
+ }
+ }
+
// The old generation is paged.
max_old_generation_size_ = RoundUp(max_old_generation_size_, Page::kPageSize);