如何获取 JavaScript 对象的大小?

2022-08-29 23:27:16

我想知道JavaScript对象占用的大小。

采用以下函数:

function Marks(){
  this.maxMarks = 100;
}

function Student(){
  this.firstName = "firstName";
  this.lastName = "lastName";
  this.marks = new Marks();
}

现在我实例化了 :student

var stud = new Student();

这样我就可以做这样的事情

stud.firstName = "new Firstname";

alert(stud.firstName);

stud.marks.maxMarks = 200;

等。

现在,对象将在内存中占据一定大小。它有一些数据和更多的对象。stud

如何确定对象占用了多少内存?像JavaScript中这样的东西?如果我能在单个函数调用中找到它,那将是非常棒的。studsizeof()sizeof(stud)

几个月来,我一直在搜索互联网 - 找不到它(在几个论坛中询问 - 没有回复)。


答案 1

我已经在原始答案中重构了代码。我已经删除了递归,并删除了假设的存在开销。

function roughSizeOfObject( object ) {

    var objectList = [];
    var stack = [ object ];
    var bytes = 0;

    while ( stack.length ) {
        var value = stack.pop();

        if ( typeof value === 'boolean' ) {
            bytes += 4;
        }
        else if ( typeof value === 'string' ) {
            bytes += value.length * 2;
        }
        else if ( typeof value === 'number' ) {
            bytes += 8;
        }
        else if
        (
            typeof value === 'object'
            && objectList.indexOf( value ) === -1
        )
        {
            objectList.push( value );

            for( var i in value ) {
                stack.push( value[ i ] );
            }
        }
    }
    return bytes;
}

答案 2

Google Chrome Heap Profiler 允许您检查对象内存使用情况。

您需要能够在跟踪中找到对象,这可能很棘手。如果将对象固定到 Window 全局,则很容易从“包含”列表模式中找到它。

在附加的屏幕截图中,我在窗口上创建了一个名为“testObj”的对象。然后,我找到了分析器(在进行录制后),它显示了对象的完整大小以及“保留大小”下的所有内容。

有关内存故障的更多详细信息

Chrome profiler

在上面的屏幕截图中,对象显示保留的大小为 60。我相信这里的单位是字节。