zoukankan      html  css  js  c++  java
  • 五、按生命周期划分数据(二)

    变量的生命周期,大概的意思就是这个变量的有效期。

    神仙阶层:global和static数据,能拥有和程序世界等长的

    亲信部队:分配在栈区(空间不大,一个线程对应一个),栈区空间的分配和回收由操作系统直接接管。

    int function(int a ){
         int count  = 10;  
    }

    这个count的生命周期以进入这个函数体开始,离开这个函数体便结束了。从开始到结束的过程完全不需要程序员控制。

    平民百姓:他们分配在堆区,堆区数据的生死,操作系统是不管的,必须由程序自己管理。在手动或半手动管理内存的语言里,了解每个对象的生命周期是基本功,并时刻注意管理内存。

    例如:

    Person person = new Person();

    或者通过反射

    Person person = personClass.newInstance();

    这个引用既可能在栈区,也可能在堆区,但她所指的内存空间一定在堆区。

    垃圾回收机制

      很多高级语言都有强大的垃圾收集器辅助,实现了全自动内存管理,所以堆区数据带来的麻烦并不明显。其中最主流的算法有两种:

      引用计数算法;

      可达性遍历算法。

      引用计数算法的核心是计算引用计数。当一个对象没有任何引用时,就可以消亡了。但是解决不了循环引用的对象。

      可达性遍历算法,就要用到全局数据和静态数据“与天同寿”的特点了,以他们为起点,建立一条条访问链条,如果有对象不存在任何一条访问链条,就意味着它将是可被清除的。

  • 相关阅读:
    冒泡排序
    tp框架---View视图层---模板继承(举例说明)
    tp框架---表单验证
    对thinkphp的命名空间的理解
    控制器操作方法的调用
    thinkphp的空控制器和空操作以及对应解决方法
    tp框架的url模式
    tp框架的MVC模式
    thinkphp目录结构
    Linux Centos 下安装软件 三种方式(转)
  • 原文地址:https://www.cnblogs.com/juanzhi/p/12363778.html
Copyright © 2011-2022 走看看