Este é um método hacky, mas eu tentei duas vezes com números diferentes e parece ser consistente.
O que você pode fazer é tentar alocar um grande número de objetos, como um ou dois milhões de objetos do tipo que você deseja. Coloque os objetos em uma matriz para impedir que o coletor de lixo os libere (observe que isso adicionará uma pequena sobrecarga de memória por causa da matriz, mas espero que isso não importe e, além disso, se você vai se preocupar com objetos que estão na memória , você as armazena em algum lugar). Adicione um alerta antes e depois da alocação e, em cada alerta, verifique quanta memória o processo do Firefox está consumindo. Antes de abrir a página com o teste, verifique se você tem uma nova instância do Firefox. Abra a página, observe o uso da memória após o alerta "antes" ser exibido. Feche o alerta, aguarde a memória ser alocada. Subtraia a nova memória da antiga e divida-a pela quantidade de alocações.
function Marks()
{
this.maxMarks = 100;
}
function Student()
{
this.firstName = "firstName";
this.lastName = "lastName";
this.marks = new Marks();
}
var manyObjects = new Array();
alert('before');
for (var i=0; i<2000000; i++)
manyObjects[i] = new Student();
alert('after');
Eu tentei isso no meu computador e o processo tinha 48352K de memória quando o alerta "antes" foi exibido. Após a alocação, o Firefox tinha 440236K de memória. Para alocações de 2 milhões, isso é cerca de 200 bytes para cada objeto.
Tentei novamente com alocações de 1 milhão e o resultado foi semelhante: 196 bytes por objeto (suponho que os dados extras em 2mill foram usados para Array).
Então, aqui está um método hacky que pode ajudá-lo. O JavaScript não fornece um método "sizeof" por um motivo: cada implementação de JavaScript é diferente. No Google Chrome, por exemplo, a mesma página usa cerca de 66 bytes para cada objeto (a julgar pelo gerenciador de tarefas, pelo menos).