首页 > 系统相关 >JavaScript内存管理——隐藏类

JavaScript内存管理——隐藏类

时间:2023-11-05 13:44:34浏览次数:58  
标签:user2 age JavaScript User new 隐藏 内存

根据JavaScript所在的运行环境,有时候需要根据JavaScript引擎采取不同的性能优化策略。如果代码非常注重性能,那么隐藏类对我们是非常重要的。比如以下的代码:

function User() {
    this.name = "User Name";
}

let user1 = new User();
ler user2 = new User();

在上面的代码中我们创建了一个User类,JavaScript引擎会让user1,user2这两个类实例共享一个隐藏类,因为这两个类实例共享同一个构造函数和原型。我们继续往下添加以下代码:

user2.age = 18;

此时两个不同的类实例会对应两个不同的隐藏类,根据这类操作的频率和隐藏类的大小会对性能产生明显影响。

解决方案就是避免JavaScript的“先创造后补充”(ready-fire-aim)式的动态属性赋值,并在构造函数中一次性声明所有属性,如下所示:

function User(age) {
    this.name = "User name";
    this.age = age;
}

let user1 = new User();
let user2 = new User(18);

这样两个类实例就基本一致了,可以共享一个隐藏类。

注意:使用delete关键字会导致生成相同的隐藏类片段。

function User() {
  this.name = "User name";
  this.age = 18; } let user1 = new User(); let user2 = new User(); delete user2.age;

在这之后就算两个类实例使用了同一个构造函数,它们也不再共享一个隐藏类。最佳解决方法就是把不想要的属性设置为null。这样可以保持隐藏类继续共享不变,同时也能达到删除引用值供垃圾回收机制回收的效果。

标签:user2,age,JavaScript,User,new,隐藏,内存
From: https://www.cnblogs.com/zousi/p/17810444.html

相关文章

  • python的内存泄漏及垃圾回收机制
    python内存泄漏的几种场景: 一,如果打开一个文件,不关闭,是不是就是内存泄漏了? 在Python中,打开的文件对象会一直存在内存中,直到显式地关闭文件或者程序结束时才会被清理。因此,如果打开了一个文件但没有关闭它,那么这个文件对象会一直占用内存,导致内存泄漏。为了避免内存泄漏问题......
  • 【趣味Javascript】前端开发中不为人知的LHS和RHS查询,你真的弄明白了吗? 《1024程序
    ......
  • JavaScript复习——03 函数
    函数在JS中也是一个对象,它具有其它对象的所有功能,函数中可以存储代码,且可以在需要的时候调用这些代码函数的操作函数的定义函数声明function函数名([参数列表]){ //函数体 return返回值;}函数表达式const函数名=function([参数列表]){ return返回值;}......
  • 内存分配
    arena这块区域最大,明显就是用来存放我们最终的对象,里面分成了一个个8K大小的房间,每个房间我们称为page。(这里虽然写了它是512G,但是你心里要有B数,你电脑根本没这么大的内存,其实操作系统只是给了你地址而已)同时几个page组合在一起的大房间又叫做mspan(这个是golang中内存管理的基本......
  • JavaScript知识点
    成员对象1、window.eventwindow.documentwindow.history2、window.screenwindow.navigatorwindow.externalWindow对象的属性如下1、window//窗户自身2、window.self//引用本窗户window=window.self3、window.name//为窗户命名4、window.defaultStatus//设定窗户状态栏信息5、w......
  • 对象内存图的过程
     单一对象1.由于TestStudent中含有main方法,因此TestStudent类先以字节码形式进入方法区,里面包含main方法2.虚拟机调用该类中的main方法,main方法进入栈内存中3.main方法中先创建对象stu,调用了student类,Student类字节码文件进入方法区4.创建了对象stu,在堆内存中开辟对象stu......
  • JavaScript知识点
    同源限制1、同源策略指的是∶协议,域名,端口相同,同源策略是一种安全协议2、举例说明:比如一个黑客程序,他利用lframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。offse......
  • JavaScript知识点
    null,undefined的区别1、undefined表示不存在这个值。2、undefined:是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回undefined3、例如变量被声明了,但没有赋值时,就等于undefined4、null表示—个对象被定义了,值为“空值”5、null......
  • JavaScript函数变量的生命周期,自执行函数、闭包、反转数组案例及冒泡排序案例
    一、变量的生命周期JavaScript变量的生命期从它们被声明的时间开始。局部变量会在函数运行以后被删除。全局变量会在页面关闭后被删除。二、自执行函数执行函数通常都是定义之后立即执行,以后都不再会调用,所以声明时可以省略函数名,因此自执行函数又叫匿名函数。通用的自执行......
  • 1 JavaScript的基础语法
    JS概念javaScript是用于实现用户交互、动态控制文档的外观和内容,动态控制浏览器操作、创建cookies等网页行为的跨平台、跨浏览器的由浏览器解释执行的客户端脚本语言;特点是基于对象的弱类型语言弱类型语言:是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境......