Das ist eine etwas umständliche Methode, aber ich habe sie zweimal mit verschiedenen Zahlen ausprobiert und sie scheint konsistent zu sein.
Was Sie tun können, ist zu versuchen, einen énorme Anzahl der Objekte, z. B. eine oder zwei Millionen Objekte der von Ihnen gewünschten Art. Legen Sie die Objekte in ein Array, um den Garbage Collector daran zu hindern, sie freizugeben (beachten Sie, dass dies aufgrund des Arrays zu einem leichten Speicher-Overhead führt, aber ich hoffe, dass dies keine Rolle spielt, und außerdem, wenn Sie sich um die Objekte im Speicher sorgen, speichern Sie sie irgendwo). Fügen Sie eine Meldung vor und nach der Zuweisung hinzu und überprüfen Sie in jeder Meldung, wie viel Speicher der Firefox-Prozess benötigt. Bevor Sie die Seite mit dem Test öffnen, stellen Sie sicher, dass Sie eine neue Firefox-Instanz haben. Öffnen Sie die Seite und notieren Sie den Speicherverbrauch, nachdem die "Vorher"-Warnung angezeigt wurde. Schließen Sie die Meldung und warten Sie, bis der Speicher zugewiesen wird. Ziehen Sie den neuen Speicher vom älteren ab und teilen Sie ihn durch die Anzahl der Zuweisungen. Beispiel:
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');
Ich habe dies auf meinem Computer ausprobiert und der Prozess hatte 48352K Speicher, als die "Vorher"-Meldung angezeigt wurde. Nach der Zuweisung hatte Firefox 440236K Speicher. Bei 2 Millionen Zuweisungen sind das etwa 200 Byte für jedes Objekt.
Ich versuchte es erneut mit 1 Million Zuweisungen und das Ergebnis war ähnlich: 196 Bytes pro Objekt (ich nehme an, die zusätzlichen Daten in 2mill wurde für Array verwendet).
Hier ist also eine Methode, die Ihnen helfen könnte. JavaScript bietet nicht ohne Grund eine "sizeof"-Methode: Jede JavaScript-Implementierung ist anders. In Google Chrome zum Beispiel verwendet dieselbe Seite etwa 66 Bytes für jedes Objekt (zumindest dem Task-Manager nach zu urteilen).