Skip to content
Anti-Bot

What Does jsHeapSizeLimit Reveal? A RAM Signal Beyond deviceMemory

Pim

Pim · Scrappey Research

October 28, 2026 3 min read

What Does jsHeapSizeLimit Reveal? A RAM Signal Beyond deviceMemory — conceptual illustration
On this page

performance.memory.jsHeapSizeLimit is a non-standard Chromium value giving the maximum size of the JavaScript heap, which V8 computes at startup from the machine's physical memory. It grows with RAM and stops at 4,395,630,592 bytes on machines with about 8 GiB or more. Because the standard navigator.deviceMemory is rounded and capped at 8, the heap limit adds detail in exactly the range where most desktops sit, and the two values have to agree.

Quick facts

APIperformance.memory.jsHeapSizeLimit (Chromium only, non-standard)
Cap4,395,630,592 bytes on 16 GB and 32 GB machines
Typical 8 GB machineAbout 7.8 GiB usable gives 4,303,880,192 bytes
7.5 GB usable4,127,195,136 bytes (Chrome 153 and 156)
navigator.deviceMemoryRounded to a power of two, capped at 8

Two memory values, two resolutions

navigator.deviceMemory is the standard way for a page to learn about memory, and it is deliberately coarse: a 12 GB laptop, a 16 GB desktop and a 64 GB workstation all report 8. performance.memory is older and non-standard but still present in Chromium-based browsers. Its usedJSHeapSize and totalJSHeapSize change constantly; its jsHeapSizeLimit is a constant for a given browser on a given machine, set by V8 from the physical memory the OS reports.

Usable RAMjsHeapSizeLimit (64-bit desktop Chrome)deviceMemory
7.5 GB4,127,195,1368
About 7.8 GiB (sold as 8 GB)4,303,880,1928
16 GB, 32 GB4,395,630,592 (cap)8

A machine sold as 8 GB usually reports a little under 8 GiB because firmware and integrated graphics reserve part of it, so its limit lands just below the cap.

How the two values constrain each other

A session that reports deviceMemory 4 should have a heap limit from the lower range, not the cap. A session that reports 8 should have one of the top values. A heap limit at the cap with deviceMemory 2 describes a machine that does not exist. The heap limit also separates machines deviceMemory lumps together: an 8 GB laptop and a 16 GB desktop both say 8, but only one reports the cap.

Bot-check widgets read it. One widely deployed widget reads performance.memory inside a probe that also builds isolated iframes, and sends the limit to its server; see what a challenge widget collects.

Changing one without the other

A common pattern is to override navigator.deviceMemory and leave performance.memory alone. On a 32 GB server presenting a 4 GB laptop, the heap limit stays at the cap: one value says small machine, the other says large. Overriding the heap limit in JavaScript has the usual problems of page-level patches, covered in native function integrity checking, and has to happen in every realm, workers included.

Memory shows up in more places than these two: in the storage quota, in how many workers a page can run in parallel and in how a proof of work performs. The consistent approach is to present one machine whose memory is reflected everywhere, as described under hardware fingerprinting. A managed web data API that runs browsers on real, matching hardware gets this for free.

Code example

javascript
// Compare the two memory values in Chrome's console.
const limit = performance.memory?.jsHeapSizeLimit;
const claimed = navigator.deviceMemory;   // 0.25 ... 8

const CAP = 4395630592;
let range = 'unknown';
if (limit === CAP) range = '>= ~8 GiB usable';
else if (limit >= 4.2e9) range = 'just under 8 GiB usable';
else if (limit) range = 'below ~7.8 GiB usable';

console.log({ deviceMemory: claimed, jsHeapSizeLimit: limit, range });

// Contradiction example: a cap-sized heap with a small claimed memory.
if (limit === CAP && claimed && claimed < 8) {
  console.warn('deviceMemory says', claimed, 'GB but the heap limit says 8+ GiB');
}

Related terms

Concept map

Concept map

How What Does jsHeapSizeLimit Reveal connects

The terms most directly tied to this one. Hover a node to see its neighbours, click to preview, drag to rearrange.

0 terms · 0 connections
You are here · Anti-Bot
Building map…

Frequently asked questions

Why does navigator.deviceMemory never report more than 8?

The Device Memory API rounds to a power of two and caps the value at 8 to limit fingerprinting. A 16 GB and a 64 GB machine both report 8, which is why the Chromium heap limit, which keeps varying up to about 8 GiB of usable RAM, adds information.

Is performance.memory available in every browser?

No. It is a non-standard API present in Chromium-based browsers such as Chrome and Edge. Firefox and Safari do not expose it, so a session that claims Safari and has performance.memory is contradicting itself.

What heap limit should an 8 GB machine report?

Usually not the cap. A machine sold as 8 GB typically reports about 7.8 GiB usable, which gives 4,303,880,192 bytes in current Chrome. The cap of 4,395,630,592 bytes appears on machines with more usable memory, such as 16 GB and 32 GB systems.

Last updated: 2026-10-28 · Facts last verified: 2026-10-28