科学网JavaScript深入浅出第3课:什么是垃圾回收算

时间:2019-07-03 19:42   编辑:admin

摘要: JS是如何回收内存的?

《》系列

最近垃圾回收这个话题非常火,大家不能随随便便的扔垃圾了,还得先分类,这样方便对垃圾进行回收再利用。

其实,对于写代码来说,也有垃圾回收(garbage collection)这个问题,这里所说的垃圾,指的是程序中不再需要的内存空间,垃圾回收指的是回收这些不再需要的内存空间,让程序可以重新利用这些释放的内存空间。

手动管理内存

对于C这种底层语言来说,我们可以使用malloc()函数分配内存空间,当所分配的内存不再需要的时候,可以使用free()函数来释放内存空间。

#include <stdio.h>
#include <stdlib.h>
#define TRUE 1

int main ()
{
 int *p, i, n, sum;

 while (TRUE)
 {
     printf ("请输入数组长度: ");
     scanf ("%d", &n);
     p = (int *) malloc (n * sizeof (int)); // 分配内存空间
     sum = 0;
     for (i = 0; i < n; ++i)
 {
   *(p + i) = i + 1;
   sum += *(p + i);
 }
     printf ("sum = %d\n", sum);
     free (p); // 释放内存空间
 }
 return 0;
}
 

示例代码很简单,输入一个整数n,程序计算1、2、3…n的和。大家可以在Online C Compiler上运行这段代码。

请输入数组长度: 36                                                                                                                                                                                                          
sum = 666                                                                                                                                                                                                                    
请输入数组长度: 100                                                                                                                                                                                                          
sum = 5050
 

如果我们不去调用free()函数释放内存的话,就会导致内存泄漏(memory leak)。每个while循环中,指针p都会指向新分配的内存空间。而p之前指向的内存空间虽然没用了,但是并不会被释放,除非程序退出。如果while循环一直执行下去的话,内存早晚不够用。

垃圾回收算法

如果让我们去手动管理内存,那不知道要写出多少BUG,内存分分钟用完。还好现代编程语言,比如Java, Python, Go以及JavaScript,都是支持自动垃圾回收的。也就是说,这些语言可以自动回收程序不再需要的内存空间,这样既减轻了开发者的负担,也有效避免了内存泄漏。

- 热点新闻

澳门葡京官网_葡京手机版网址_葡京网上娱乐导航 Power by DedeCms

粤ICP备56985693号