Windows 95 shipped with a minimum requirement of 4MB of RAM. Most people ran it on 8MB. The entire operating system — the kernel, the UI, the file system, the network stack, the drivers — fit in less memory than a single Slack message today.
In 2026, open Chrome. Open a new tab. Do not navigate anywhere. Leave it blank. Check Chrome's Task Manager. That empty tab uses 50 to 80MB of RAM. A blank page. No content. No JavaScript running. Just a white rectangle with an address bar. It uses 12 to 20 times the RAM of an entire 1995 operating system.
This is not a bug. It is the cost of the modern web stack. And understanding where that cost comes from explains why your browser with 30 tabs uses more RAM than a 2010 gaming PC.
What a Blank Tab Actually Loads
A blank tab is not empty. Chrome creates a full renderer process for it. That process includes:
- V8 JavaScript engine: 8-12MB. Even on a blank page, V8 is initialized and ready. It compiles nothing, but the runtime is resident.
- Blink rendering engine: 6-10MB. The HTML/CSS layout engine, the compositor, the paint system. All initialized.
- Skia graphics library: 4-6MB. The 2D graphics engine that draws everything on screen.
- Network stack: 3-5MB. HTTP/2, HTTP/3, QUIC, DNS cache, cookie store, SSL/TLS state. Ready for the first request.
- Security sandbox: 2-4MB. The process isolation layer that keeps tabs from accessing each other or the OS.
- Extension hooks: 5-15MB. Every extension injects content scripts into every tab. Ad blockers, password managers, grammar checkers, preview tools — they all add overhead per tab.
- GPU process communication: 2-3MB. The channel between the renderer and the GPU process for compositing.
Add it up: 30 to 55MB for the core engine. Plus 5 to 15MB for extensions. Plus 5 to 10MB for the new tab page itself (which is not blank — it loads thumbnails, search suggestions, and analytics). Total: 50 to 80MB per tab. For nothing.
Why Windows 95 Fit in 4MB
Windows 95 was a 16/32-bit hybrid OS. It ran on a 386 processor. It had no GPU acceleration. No JavaScript engine. No network stack beyond basic TCP/IP. No sandboxing. No extensions. No compositor. No WebGL. No WebAssembly. No service workers. No push notifications.
It also had no security model to speak of. Every application ran with full system access. There was no process isolation. No sandbox. No permission system. If a program crashed, it could take down the OS. The trade-off was simplicity and small size.
Modern browsers are operating systems. They run code from arbitrary websites in isolated processes. They compile JavaScript to machine code in real time. They render vector graphics with GPU acceleration. They handle encrypted connections, certificate validation, and origin policies. They manage persistent storage, background sync, and push notifications. All of this costs memory. A lot of it.
The Process-Per-Tab Tax
Chrome's defining architectural decision is process-per-tab. Every tab is a separate OS process. This gives stability — one tab crash does not kill the browser — and security — each tab runs in its own sandbox. But it also means every tab pays the full process overhead.
A process on modern operating systems has baseline overhead:
- Page tables: 2-4MB per process for memory mapping
- Kernel structures: 1-2MB for the process control block, file descriptors, thread state
- Shared library mappings: 5-10MB duplicated per process (V8, Blink, Skia, etc.)
- Thread stacks: 1-2MB for the renderer thread, compositor thread, IO thread
This baseline is 10 to 20MB before the tab loads a single byte. Then the rendering engine initializes. Then the extensions inject. Then the new tab page loads. You are at 50 to 80MB before you type a URL.
Safari and Firefox use fewer processes. Safari groups tabs into a single process per site. Firefox uses a hybrid model. This saves RAM but sacrifices isolation. One bad tab can crash a group. The trade-off is real. Chrome chose isolation. You pay for it in RAM.
Where the RAM Goes: A Breakdown
| Component | RAM (blank tab) | What It Does |
|---|---|---|
| V8 JavaScript engine | 8-12 MB | JIT compiler, garbage collector, runtime. Initialized even on blank pages. |
| Blink rendering engine | 6-10 MB | HTML/CSS parser, layout engine, DOM tree, style computation. |
| Skia graphics | 4-6 MB | 2D rasterization, text rendering, path operations. |
| Network stack | 3-5 MB | HTTP/2, HTTP/3, QUIC, DNS, cookies, SSL state. |
| Security sandbox | 2-4 MB | Process isolation, privilege reduction, syscall filtering. |
| Extension content scripts | 5-15 MB | Ad blockers, password managers, preview tools injected per tab. |
| New Tab Page | 5-10 MB | Thumbnails, search suggestions, analytics, background image. |
| Process overhead | 10-18 MB | Page tables, kernel structures, shared libraries, thread stacks. |
The extensions line is the most variable. A clean Chrome install with no extensions uses closer to 50MB per blank tab. Add uBlock Origin, Bitwarden, a preview tool, and a color picker, and you are at 70 to 80MB. Some enterprise extensions add 20MB per tab. The blank tab is not the problem. The ecosystem around it is.
What Windows 95 Did With 4MB
Windows 95's 4MB covered:
- The kernel and executive: ~1MB
- The GDI (graphics device interface): ~512KB
- The USER module (window management): ~512KB
- The file system cache: ~1MB
- The virtual memory manager: ~256KB
- Drivers and hardware abstraction: ~512KB
Total: ~4MB. No JavaScript. No GPU compositor. No network encryption. No sandbox. No extensions. It was a simpler time with simpler threats and simpler expectations.
But it also could not do what a browser does. It could not run untrusted code from the internet in a secure container. It could not render a responsive layout with animations and gradients. It could not stream video, compile WebAssembly, or maintain a persistent connection to a push notification server. The comparison is unfair because the jobs are different.
The Real Problem: We Treat Tabs as Free
A blank tab costs 50 to 80MB. A loaded tab costs 100 to 600MB. We open 20, 30, 50 of them without thinking. We middle-click links out of habit. We keep tabs open "just in case." We treat tabs as bookmarks with memory. And we wonder why our machines slow down.
The browser is not the villain. It is doing a complex job under complex constraints. The villain is the habit of opening tabs for glances. Every tab is a process. Every process is 50MB minimum. 20 tabs is 1GB before you load a single page. 50 tabs is 2.5GB of baseline overhead. That is not bloat. That is math.
What You Can Do About It
You cannot make a blank tab use 4MB. The modern web requires the modern stack. But you can stop paying the tax 50 times over.
- Remove unnecessary extensions. Each one adds 5-15MB per tab. A color picker you used once is costing you RAM on every tab, every day.
- Preview instead of opening. A preview does not create a new process. It uses the existing renderer. RAM cost: near zero. Tab cost: zero.
- Close tabs when done. A tab you are not using is a process you are paying for. The 5-second rule: if you will close it within 5 minutes, do not open it.
- Use bookmarks for storage. Bookmarks use kilobytes. Tabs use megabytes. Store references in bookmarks, not tabs.
- Enable Memory Saver. Chrome's Memory Saver puts idle tabs to sleep. It does not eliminate the process overhead, but it reduces it significantly.
Why This Matters
The blank tab is a symbol. It represents how far we have come and how much we waste. We have built a browser that can run Photoshop in a tab, compile C++ in a tab, and stream 4K video in a tab. And we use that power to keep 40 blank-ish tabs open because we might need them later.
Windows 95 ran an entire OS in 4MB because it had to. Hardware was scarce. Every byte mattered. Today, hardware is abundant. We stopped counting bytes. We stopped counting tabs. And our browsers became the most memory-hungry applications on our machines — not because they are poorly built, but because we use them poorly.
The browser is an operating system. Treat it like one. You would not run 50 idle applications on your desktop. Do not run 50 idle processes in your browser.