「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JavaScript オブジェクトのおおよそのメモリ使用量を計算するにはどうすればよいでしょうか?

JavaScript オブジェクトのおおよそのメモリ使用量を計算するにはどうすればよいでしょうか?

2024 年 11 月 16 日に公開
ブラウズ:389

How Can We Calculate the Approximate Memory Footprint of a JavaScript Object?

JavaScript オブジェクトのメモリ フットプリントの決定

JavaScript では、パフォーマンスを最適化しメモリ リークを回避するために、オブジェクトのメモリ消費量を理解することが重要です。この記事では、JavaScript オブジェクトのサイズを取得するクエリを取り上げ、そのようなオブジェクトが占有するおおよそのメモリを推定するソリューションについて詳しく説明します。

オブジェクト サイズの決定

In JavaScript には、オブジェクトのサイズを決定するために特別に設計された組み込み関数はありません。ただし、一般的な手法では、オブジェクトのプロパティを反復処理し、各プリミティブ値とオブジェクト参照のサイズを計算します。この推定では、ブール値 (4 バイト)、文字列 (長さ * 2 バイト)、数値 (8 バイト) などのデータ型のサイズが考慮されます。

オブジェクト サイズ推定ツールの実装

特定のオブジェクトのサイズを推定するには、再帰関数を使用できます。

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;
}

提供された例の使用:

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`);

このシナリオでは、roughSizeOfObject 関数は、プロパティやネストされたオブジェクトを含むスタッド オブジェクトのおおよそのメモリ消費量を推定します。

制限事項

この手法は近似値を提供するものであり、オブジェクトに関連するすべてのメモリ割り当てを考慮しているわけではないことに注意することが重要です。さらに、オブジェクト参照とクロージャに関連するオーバーヘッドにより、サイズを正確に決定する際にさらに複雑さが生じる可能性があります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3