Determinando o consumo de memória de objetos JavaScript
Em JavaScript, compreender o consumo de memória de objetos é crucial para otimizar o desempenho e evitar vazamentos de memória. Este artigo aborda a questão de obter o tamanho de um objeto JavaScript, aprofundando-se em uma solução que estima a memória aproximada ocupada por tais objetos.
Determinando o tamanho do objeto
Em JavaScript, não existe uma função interna projetada especificamente para determinar o tamanho de um objeto. No entanto, uma técnica comum envolve iterar pelas propriedades do objeto e calcular o tamanho de cada valor primitivo e referência de objeto. Esta estimativa considera os tamanhos dos tipos de dados, como booleano (4 bytes), string (comprimento * 2 bytes) e número (8 bytes).
Implementando um estimador de tamanho de objeto
Para estimar o tamanho de um determinado objeto, uma função recursiva pode ser empregada:
function roughSizeOfObject(object) { const objectList = []; const stack = [object]; let bytes = 0; while (stack.length) { const value = stack.pop(); switch (typeof value) { case 'boolean': bytes = 4; break; case 'string': bytes = value.length * 2; break; case 'number': bytes = 8; break; case 'object': if (!objectList.includes(value)) { objectList.push(value); for (const prop in value) { if (value.hasOwnProperty(prop)) { stack.push(value[prop]); } } } break; } } return bytes; }
Exemplo
Usando o exemplo fornecido:
function Marks() { this.maxMarks = 100; } function Student() { this.firstName = "firstName"; this.lastName = "lastName"; this.marks = new Marks(); } const stud = new Student(); const sizeInBytes = roughSizeOfObject(stud); console.log(`Object size: ${sizeInBytes} bytes`);
Neste cenário, a função roughSizeOfObject estima o consumo aproximado de memória do objeto Stud, incluindo suas propriedades e objetos aninhados.
Limitações
É importante observar que esta técnica fornece uma aproximação e pode não levar em conta todas as alocações de memória relacionadas ao objeto. Além disso, a sobrecarga associada a referências e fechamentos de objetos pode introduzir complexidade adicional na determinação precisa do tamanho.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3