zoukankan      html  css  js  c++  java
  • 自动垃圾回收

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

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

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

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

       go语言作为一门新生的开发语言,当然不能忽略内存管理这个问题。又因为go语言没有c++复杂的指针计算功能,因此可以很自然的包含垃圾回收功能。因为垃圾回收功能的支持,开发者无需担心所指向的对象失效的问题,因此,go语言不需要delete关键字,也不需要free方法来明确释放内存。例如,如果用go语言,开发者完全不用考虑何时需要释放之前分配的内存问题,系统会自动帮我们判断,并在合适的时候(比如cpu相对空闲的时候)进行自动垃圾收集工作。

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

  • 相关阅读:
    ftp命令行敲不了
    转载 vsftpd安装
    ftp上传不了故障
    mysql导入数据方法和报错解决
    time使用方法
    python 进程Queue
    python 进程事件
    python 进程信号量
    python 进程锁
    python 守护进程
  • 原文地址:https://www.cnblogs.com/FlameLuo/p/9801753.html
Copyright © 2011-2022 走看看