自动垃圾回收

   不支持垃圾回收的语言的资源管理方式,以下一小段c语言代码c++

void foo() { char* p=new char[128]; ... // 对p指向的内存进行赋值
    funcl(p); // 使用内存指针
 delete[] p; }

 

   各类非预期的缘由,例如因为开发者的疏忽致使最后的delete语句没有被调用,都会引起内存泄漏问题。假如该函数被调用的很是频繁,那么观察该进程执行时,会发现该进程所占用的内存会一直疯长,直至占用全部系统内存并致使程序崩溃,而若是泄漏的是系统资源的话,那么后果会比较严重,甚至致使系统奔溃。算法

   手动管理内存的另一个问题就是因为指针的处处传递而没法肯定什么时候能够释放指针所指向的内存块。假如代码中某个位置释放了内存,而另外一些地方还在使用指向这块内存的指针,那么这些指针就变成了所谓的“野指针”或者“悬空指针”,对这些指针进行的任何读写操做都会致使不可预料的后果。函数

   go语言做为一门新生的开发语言,固然不能忽略内存管理这个问题。又由于go语言没有c++复杂的指针计算功能,所以能够很天然的包含垃圾回收功能。由于垃圾回收功能的支持,开发者无需担忧所指向的对象失效的问题,所以,go语言不须要delete关键字,也不须要free方法来明确释放内存。例如,若是用go语言,开发者彻底不用考虑什么时候须要释放以前分配的内存问题,系统会自动帮咱们判断,并在合适的时候(好比cpu相对空闲的时候)进行自动垃圾收集工做。性能

   到目前为止,内存泄漏的最佳解决方案是在语言级别引入自动垃圾回收算法(简称GC)。所谓垃圾回收,即全部的内存分配动做都会被在运行时记录,同时任何对该内存的使用也都会被记录,而后垃圾回收器会对全部已经分配的内存进行跟踪监测,一旦发现有些内存已经再也不被任何人使用,就阶段性的回收这些没人用的内存。固然,由于须要尽可能最小化垃圾回收的性能损耗,以及下降对正常程序执行过程的影响,现实中的垃圾回收算法要比这个复杂的多,好比为对象增长年龄属性等。spa

相关文章
相关标签/搜索