C'est une méthode approximative, mais j'ai essayé deux fois avec des nombres différents et cela semble être cohérent.
Ce que vous pouvez faire, c'est d'essayer d'allouer une enorme nombre d'objets, comme un ou deux millions d'objets du type que vous voulez. Placez les objets dans un tableau pour empêcher le ramasseur d'ordures de les libérer (notez que cela ajoutera une légère surcharge de mémoire à cause du tableau, mais j'espère que cela n'aura pas d'importance et d'ailleurs si vous vous inquiétez de la présence d'objets en mémoire, vous les stockez quelque part). Ajoutez une alerte avant et après l'allocation et vérifiez dans chaque alerte combien de mémoire le processus Firefox prend. Avant d'ouvrir la page avec le test, assurez-vous que vous avez une nouvelle instance de Firefox. Ouvrez la page, notez l'utilisation de la mémoire après l'affichage de l'alerte "avant". Fermez l'alerte, attendez que la mémoire soit allouée. Soustrayez la nouvelle mémoire de l'ancienne et divisez-la par le nombre d'allocations. Exemple :
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');
J'ai essayé cela sur mon ordinateur et le processus avait 48352K de mémoire lorsque l'alerte "avant" a été affichée. Après l'allocation, Firefox avait 440236K de mémoire. Pour 2 millions d'allocations, cela représente environ 200 octets pour chaque objet.
J'ai réessayé avec 1 million d'allocations et le résultat était similaire : 196 octets par objet (je suppose que les données supplémentaires dans 2 millions ont été utilisées pour Array).
Voici donc une méthode astucieuse qui pourrait vous aider. JavaScript ne fournit pas de méthode "sizeof" pour une raison : chaque implémentation JavaScript est différente. Dans Google Chrome, par exemple, la même page utilise environ 66 octets pour chaque objet (à en juger par le gestionnaire de tâches, du moins).