diff --git Source/WTF/wtf/RAMSize.cpp Source/WTF/wtf/RAMSize.cpp
index 5d34d3b..3dd516c 100644
--- Source/WTF/wtf/RAMSize.cpp
+++ Source/WTF/wtf/RAMSize.cpp
@@ -29,41 +29,61 @@
 #include "StdLibExtras.h"
 #include <mutex>
 
-#if OS(WINDOWS)
+#if OS(DARWIN)
+#import <dispatch/dispatch.h>
+#import <mach/host_info.h>
+#import <mach/mach.h>
+#import <mach/mach_error.h>
+#import <math.h>
+#elif OS(UNIX)
+#include <unistd.h>
+#elif OS(WINDOWS)
 #include <windows.h>
-#elif defined(USE_SYSTEM_MALLOC) && USE_SYSTEM_MALLOC
-#if OS(UNIX)
-#include <sys/sysinfo.h>
-#endif // OS(UNIX)
-#else
-#include <bmalloc/bmalloc.h>
 #endif
 
 namespace WTF {
 
-#if OS(WINDOWS)
 static const size_t ramSizeGuess = 512 * MB;
-#endif
 
 static size_t computeRAMSize()
 {
-#if OS(WINDOWS)
+#if PLATFORM(IOS_SIMULATOR)
+    // Pretend we have 512MB of memory to make cache sizes behave like on device.
+    return ramSizeGuess;
+#elif OS(DARWIN)
+    host_basic_info_data_t hostInfo;
+
+    mach_port_t host = mach_host_self();
+    mach_msg_type_number_t count = HOST_BASIC_INFO_COUNT;
+    kern_return_t r = host_info(host, HOST_BASIC_INFO, (host_info_t)&hostInfo, &count);
+    mach_port_deallocate(mach_task_self(), host);
+    if (r != KERN_SUCCESS) {
+        LOG_ERROR("%s : host_info(%d) : %s.\n", __FUNCTION__, r, mach_error_string(r));
+        return ramSizeGuess;
+    }
+
+    if (hostInfo.max_mem > std::numeric_limits<size_t>::max())
+        return std::numeric_limits<size_t>::max();
+
+    size_t sizeAccordingToKernel = static_cast<size_t>(hostInfo.max_mem);
+    size_t multiple = 128 * MB;
+
+    // Round up the memory size to a multiple of 128MB because max_mem may not be exactly 512MB
+    // (for example) and we have code that depends on those boundaries.
+    return ((sizeAccordingToKernel + multiple - 1) / multiple) * multiple;
+#elif OS(UNIX)
+    long pages = sysconf(_SC_PHYS_PAGES);
+    long pageSize = sysconf(_SC_PAGE_SIZE);
+    if (pages == -1 || pageSize == -1)
+        return ramSizeGuess;
+    return pages * pageSize;
+#elif OS(WINDOWS)
     MEMORYSTATUSEX status;
     status.dwLength = sizeof(status);
     bool result = GlobalMemoryStatusEx(&status);
     if (!result)
         return ramSizeGuess;
     return status.ullTotalPhys;
-#elif defined(USE_SYSTEM_MALLOC) && USE_SYSTEM_MALLOC
-#if OS(UNIX)
-    struct sysinfo si;
-    sysinfo(&si);
-    return si.totalram * si.mem_unit;
-#else
-#error "Missing a platform specific way of determining the available RAM"
-#endif // OS(UNIX)
-#else
-    return bmalloc::api::availableMemory();
 #endif
 }
 
@@ -77,4 +97,4 @@ size_t ramSize()
     return ramSize;
 }
 
-} // namespace WTF
+} // namespace WTF
\ No newline at end of file