首页 > 系统相关 >内存回收、流程控制和循环

内存回收、流程控制和循环

时间:2022-09-27 16:01:36浏览次数:49  
标签:代码 回收 计数 l2 引用 l1 流程 内存

垃圾回收机制

"""
有一些语言 内存空间的申请和释放都需要程序员自己写代码才可以完成
但是python却不需要 通过垃圾回收机制自动管理
"""
1. 引用计数
  name = 'jason'  数据值jason身上的引用计数为1
  name1 = name    数据值jason身上的引用计数加一  为2
  del  name1      数据值jason身上的引用计数减一  为1
  当数据值身上的引用计数为0的时候  就会被垃圾回收机制当做垃圾回收掉
  当数据值身上的引用计数不为0的时候 永远不会被垃圾回收机制回收
2. 标记清除
  主要针对循环引用问题
  l1 = [11, 22]  # 引用计数为1
  l2 = [33, 44]  # 引用计数为1
  l1.append(l2)  # l1 = [11, 22, l2列表] 引用计数为2
  l2.append(l1)  # l2 = [33, 44, l1列表]  引用计数为2
  del l1  # 断开变量名l1与列表的绑定关系  引用计数为1
  del l2  # 断开变量名l2与列表的绑定关系  引用计数为1
当内存占用达到临界值的时候,程序会自动停止,然后扫描程序中所有的数据
并且只产生循环引用的数据打上标记 之后一次性清除

image

3. 分代回收
垃圾回收机制的频繁运行也会损耗各项资源
新生代、青春代、老年代(越往下检测频率越低)

image

流程控制理论

流程控制: 控制事物的执行流程
  事物执行流程总共可以分为三种
  1. 顺序结构
     从上往下依次执行,我们之前所编写的代码都属于该结构
  2. 分支结构
     事物的执行会根据条件的不同做出不同的执行策略
  3. 循环结构
     事物的执行会根据某个条件出现重复
  PS:在代码的世界里,很多时候可能会出现三者混合
提示:作为小白,在学习流程控制的时候,建议做到代码和图形的结合

顺序结构图

image

分支结构图

image

循环结构图

image

流程控制必备知识

1. python中使用代码的缩进来表示代码的从属关系
  从属关系:缩进的代码(子代码)是否执行取决于上面没有缩进的
2. 并不是所有的代码都可以拥有缩进的代码(子代码),例如if关键字
3. 如果有多行子代码属于同一个父代码,那么这些子代码需要保证相同的缩进量
4. python中针对缩进量没有具体的要求,但是推荐使用四个空格(windows中tab键)
5. 当某一行 代码需要编写子代码的时候,那么这一行代码的结尾肯定需要冒号
6. 相同缩进量的代码彼此之间平起平坐,按照顺序结构依次执行

分支结构

标签:代码,回收,计数,l2,引用,l1,流程,内存
From: https://www.cnblogs.com/winter-yu1989/p/16734847.html

相关文章

  • 垃圾回收机制GC
    垃圾回收机制GC我们已经知道,name='leethon'这一赋值变量的操作,是将变量与数据值相绑定。而数据值是存储到内存中的,有时变量会重新赋值即绑定其他数据值,而使得原本的数......
  • 通过Thread Pool Executor类解析线程池执行任务的核心流程
    摘要:ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态。本文分享自华为云社区《【高......
  • C# 手动回收
    1、正常C#是继承GC,是无需手动回收释放,但是有时候确实遇到相关异常报错,手动释放是可以的finally{if(conn!=null&&conn.State!=Con......
  • 应用内存管理:Linux的应用与内存管理
    应用程序想要使用内存,必须得找操作系统申请,那就有必要先了解下Linux内核怎么管理内存的,然后再去分析应用程序的内存管理细节。硬件架构现代计算机体系结构被称为Non-Unif......
  • Jvm(day3—内存模型)
    Jvm内存模型 名称说明方法区存储:类的元信息、静态变量、常量jdk1.8之后,用元空间替换了方法区,且元空间的内存不在jvm中,而是用的本地内存。堆区存储:对象......
  • Java流程控制05(switch多选择结构)
    多选择结构还有一个实现方式就是switchcase语句switchcase语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支语法:switch(表达式){casevalue......
  • Java流程控制01(Scanner)
    用户交互Scanner:之前学习的基本语法中,我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入"Java.util.Scanner"是Java5的新特征,我......
  • swap内存查看
    【转载】https://blog.csdn.net/carefree2005/article/details/124726273编写脚本找出swap占用top20进程#!/bin/bash#scriptname:swap_check.sh#author:wuhs#vers......
  • 一个查看堆内存泄露的工具
    valgrind1#include<stdlib.h>2#include<stdio.h>34voidf(void)5{6int*x=malloc(10*sizeof(int));7x[10]=0;8}9intmain(v......
  • 大页内存(Huge Pages)
    简单来说就是通过增大操作系统页的大小来减小页表,从而避免快表缺失。在介绍之前需要强调一点,大页内存也有适用范围,程序耗费内存很小或者程序的访存局部性很好,大页内存很难......