roc*_*oco 3 javascript memory typescript
我发现界面非常有用,但是由于内存问题我需要开始优化我的应用程序,我意识到我并不真正了解它们在内部如何工作.
说我有
interface Foo {
bar: number
}
Run Code Online (Sandbox Code Playgroud)
我用这种类型实例化一些变量:
let x : Foo = { bar: 2 }
Run Code Online (Sandbox Code Playgroud)
Q1:这会创建一个新对象吗?
现在,假设我想改变bar的值.我这样做有两种方式.第一种方式:
x = { bar: 5 }
Run Code Online (Sandbox Code Playgroud)
Q2:这是第一种方式创建一个新对象并替换引用的旧对象x,导致旧对象(with bar = 2)最终被垃圾收集?
第二种方式:
x.bar = 5
Run Code Online (Sandbox Code Playgroud)
问题3:这不是创建一个新对象,而只是更新bar第一个对象(有bar = 2)的值,并避免垃圾收集,因为仍然只有一个对象并且它正在使用中?
我相信我的问题的答案是肯定的,是的,是的.但我想确定,因为我真的很头疼处理过于频繁的垃圾收集,我认为我的代码的许多部分使用"第一路"而不是第二路可能是一个很大的因素.
您的答案(是,是和是)是正确的.如果你用新的(x = {bar: 5})替换对象很多,那么是的,这意味着垃圾收集器有更多的工作要做x.bar = 5而不是做.
Re Q2:x = {bar: 5}创建一个新对象,意味着如果其他任何东西仍然没有引用所引用的旧对象,则引用的旧对象x可用于垃圾回收.否则,如果某些内容仍然引用了以前引用的内容,例如:xx
let y = x;
x = {bar: 5};
Run Code Online (Sandbox Code Playgroud)
...然后x用于引用的对象将一直存在(因为y引用它)直到/除非y不再引用它(因为您为其分配了不同的值y或因为y超出范围而未被闭包引用) .
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |