// Flags: --expose-gc 'use strict'; const common = require('../common'); const assert = require('assert'); const net = require('net'); // Tests that, when receiving small chunks, we do not keep the full length // of the original allocation for the libuv read call in memory. let client; let baseRSS; const receivedChunks = []; const N = 250000; const server = net.createServer(common.mustCall((socket) => { baseRSS = process.memoryUsage().rss; socket.setNoDelay(true); socket.on('data', (chunk) => { receivedChunks.push(chunk); if (receivedChunks.length < N) { client.write('a'); } else { client.end(); server.close(); } }); })).listen(0, common.mustCall(() => { client = net.connect(server.address().port); client.setNoDelay(true); client.write('hello!'); })); process.on('exit', () => { global.gc(); const bytesPerChunk = (process.memoryUsage().rss - baseRSS) / receivedChunks.length; // We should always have less than one page (usually ~ 4 kB) per chunk. assert(bytesPerChunk < 650, `measured ${bytesPerChunk} bytes per chunk`); });