# HG changeset patch # User James Le Cuirot # Date 1441543564 -3600 # Sun Sep 06 13:46:04 2015 +0100 # Node ID d0224f4490d6694e77dcb0ff7eae8e2297b822bf # Parent e215e36be9fc2b7dfe43ff10ec1afe639b289aa5 Dynamically set the maximum heap size on Linux diff -r e215e36be9fc -r d0224f4490d6 src/vm/vm.cpp --- cacao/cacao/src/vm/vm.cpp Mon Feb 11 19:31:28 2013 +0100 +++ cacao/cacao/src/vm/vm.cpp Sun Sep 06 13:46:04 2015 +0100 @@ -33,6 +33,10 @@ #include #include +#if defined(__LINUX__) +#include +#endif + #include "vm/types.h" #include "arch.h" @@ -702,6 +706,19 @@ opt_heapstartsize = HEAP_STARTSIZE; opt_stacksize = STACK_SIZE; +#if defined(__LINUX__) + // Calculate 1/4 of the physical memory. + uint64_t qmem = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE) / 4; + + if (qmem > INT32_MAX) { + // More than 2GB will overflow so cap it. + opt_heapmaxsize = 2047 * 1024 * 1024; + } else if (qmem > HEAP_MAXSIZE) { + // Otherwise use this if greater than default (128MB). + opt_heapmaxsize = (s4) qmem; + } +#endif + // First of all, parse the -XX options. #if defined(ENABLE_VMLOG)