TypeScript 中的内存释放

Posted

技术标签:

【中文标题】TypeScript 中的内存释放【英文标题】:Memory deallocation in TypeScript 【发布时间】:2015-02-21 05:33:48 【问题描述】:

我有一个变量oneDay,我为其分配了一个整数

 var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds

我在声明代码的函数终止结束时使用以下语法释放oneDay 占用的内存。

 var oneDay=null;

我得到的错误:

错误 TS2134:后续变量声明必须具有相同的 类型。变量“oneDay”必须是“Date”类型,但这里有类型 '空'。

可能的解决方案是什么??谢谢

【问题讨论】:

你为什么认为这是释放内存?让它超出范围。 你不会在 javascript 中手动管理内存 你为什么要重新声明一天 @Jain 说了什么;这是你的错误的真正原因。 我不确定,但它适用于你 $scope.days = null 或删除 $scope.days 【参考方案1】:

原因:您正在重新声明此变量,这就是您收到此错误的原因。 试试这个:

oneDay = null;
$scope.days = null

delete $scope.days 

【讨论】:

delete oneDay 绝对不会做任何事情。 不幸的是,这个接受的答案是不恰当的。将变量设置为 null 绝对没有用(因为存储 null 占用的空间与存储一天中的毫秒数相同),即使您需要担心内存管理,当然您不需要. 我的回答是可以更新null后可以释放变量的内存空间。请阅读:***.com/questions/2999604/… 在这种情况下,他正在“释放”一个复杂对象(一个数组)。您正在尝试通过将其设置为不同的标量(null)来“释放”标量(单个值,原始)。将标量设置为 null 不会释放任何内容,它只是将其值更改为 null。可能有一些极其特殊的情况,您需要通过将复杂对象设置为 null 来帮助 JS 解决其 GC,但这个问题的真正答案,在我之后非常仔细地重复,是 您不需要做任何分配,或释放,或 JavaScript 中的任何其他形式的内存管理 另外,请阅读@SteveFenton 的答案,他应该知道他在用 60K 的代表在说什么。他的答案应该被标记为接受。【参考方案2】:

在 JavaScript 中为您管理内存。

所有现代浏览器都使用标记和扫描算法来检测无法访问的对象(一些较旧的浏览器使用引用计数算法,该算法无法收集存在引用循环的对象,因为总会有引用)*。

一旦一个对象不再被引用,它就有资格进行垃圾回收(尽管垃圾回收将在“某个时间点”发生,而不是立即发生)。

总体而言,您无需担心 JavaScript 或 TypeScript 中的内存管理 - 除非您有可衡量的问题。

(* 来自 Pro TypeScript,p168-170)

【讨论】:

感谢@Steve 分享这些宝贵的信息

以上是关于TypeScript 中的内存释放的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中的 2D 动态内存分配数组中释放分配的内存

释放 TDengine 数据库中的内存?

linux采用啥方法实现内存的分配和释放

使用颜色条删除图像不会释放 matplotlib 中的内存?

从 JavaScript 中的局部变量释放内存

单声道中的数组分配的内存不释放(C#)