void V8GCController::majorGCEpilogue() { v8::HandleScope scope; // The GC can happen on multiple threads in case of dedicated workers which run in-process. { MutexLocker locker(workingSetEstimateMBMutex()); workingSetEstimateMB = MemoryUsageSupport::actualMemoryUsageMB(); } TRACE_EVENT_END0("v8", "GC"); }
void V8GCController::checkMemoryUsage() { #if PLATFORM(CHROMIUM) const int lowMemoryUsageMB = MemoryUsageSupport::lowMemoryUsageMB(); const int highMemoryUsageMB = MemoryUsageSupport::highMemoryUsageMB(); const int highUsageDeltaMB = MemoryUsageSupport::highUsageDeltaMB(); int memoryUsageMB = MemoryUsageSupport::memoryUsageMB(); int workingSetEstimateMBCopy; { MutexLocker locker(workingSetEstimateMBMutex()); workingSetEstimateMBCopy = workingSetEstimateMB; } if ((memoryUsageMB > lowMemoryUsageMB && memoryUsageMB > 2 * workingSetEstimateMBCopy) || (memoryUsageMB > highMemoryUsageMB && memoryUsageMB > workingSetEstimateMBCopy + highUsageDeltaMB)) v8::V8::LowMemoryNotification(); #endif }
void V8GCController::checkMemoryUsage() { const int lowMemoryUsageMB = MemoryUsageSupport::lowMemoryUsageMB(); const int highMemoryUsageMB = MemoryUsageSupport::highMemoryUsageMB(); const int highUsageDeltaMB = MemoryUsageSupport::highUsageDeltaMB(); int memoryUsageMB = MemoryUsageSupport::memoryUsageMB(); int workingSetEstimateMBCopy; { MutexLocker locker(workingSetEstimateMBMutex()); workingSetEstimateMBCopy = workingSetEstimateMB; } if (memoryUsageMB > lowMemoryUsageMB && memoryUsageMB > 2 * workingSetEstimateMBCopy) { // Memory usage is large and doubled since the last GC. // Check if we need to send low memory notification. v8::HeapStatistics heapStatistics; v8::V8::GetHeapStatistics(&heapStatistics); int heapSizeMB = heapStatistics.total_heap_size() >> 20; // Do not send low memory notification if V8 heap size is more than 7/8 // of total memory usage. Let V8 to schedule GC itself in this case. if (heapSizeMB < memoryUsageMB / 8 * 7) v8::V8::LowMemoryNotification(); } else if (memoryUsageMB > highMemoryUsageMB && memoryUsageMB > workingSetEstimateMBCopy + highUsageDeltaMB) {