回收机制与编码预设

2022/6/28 23:21:29

本文主要是介绍回收机制与编码预设,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

回收机制与编码预设

垃圾回收机制

image

  • 引用计数

    • 首先呢我们先了解一下什么是数据垃圾,为什么会产生数据垃圾?

      1.在内存空间中如果建立一个数据就需要给他绑定一个变量名进行存储,代表我们接下来会用到这个数据,所以在
      经过系统优化排查时这个数据就不会被清除掉,相反我们如果只创建了一个数据没有绑定变量名那么这个数据就不
      会被找到,系统就会默认你这个数据没有用帮你自动清除这个数据。没有用的数据在计算机眼里就是一团垃圾自
      动帮你清除。
      
    • 引用计数

      1.我们在给数据绑定变量名时一般只会绑定一个变量名,那么它就会有一个给它计数的变量名,也就是1
      name = 'joseph'
      2.当我们给上方那个数值再绑定一个变量名用来找它的时候那么它的计数数值就是2
      name1 = name
      3.当我们将它其中一个变量名删除时,上方数据也还是可以通过另一个变量名进行存储而不会被系统自动清除,它
      的计数数值也就重新变回1
      del = name
      
  • 循环引用

    我们计数引用时会有一个bug导致数据不会被系统删除那么就是循环引用
    我们将两个数值进行互相绑定这样即使我们将双方的变量名都删除了那么这两个数据值依旧会存在
    name1 = 'joseph'计数为1
    name2 = 'jason'计数为1
    name1.append(name2)计数为2
    name2.append(name1)计数为2
    del = name1计数为1
    del = name2计数为1
    
  • 标记清除

    1.当我们遇到上方那种循环引用时那么普通的数据清除机制就会不太好使了,就到我们的标记清除的登场时刻。
    标记清除会在所有数据上都筛查一便如果碰到上方循环引用的情况,就会给上方的循环引用打上一个标记。
    如果这个循环引用依旧在使用那么就不会对这个循环引用删除,如果不使用那么就会被这个标记清除。
    
  • 分代回收

    1.分代回收我们一般称为三分代回收
    2.标记清除会每隔一段时间就去将全部数据去循环筛查一遍那样太浪费系统资源,所以就会使用我们的分代回收,将所
    有数据列三个表将常用数据,非常用数据,新建数据放入这三个模块中新建数据我们就会经常去筛查看有没有垃圾数据
    例如五分钟就会巡查一次,如果是非常用数据那么就会放宽一点采用15分钟才会去巡查一次,常用数据那么计算机就会
    比较放心,四十分钟或者一个小时才会去巡查一次。
    3.所以为了减少计算机资源的浪费我们就会使用分代回收机制。
    

    image

字符编码简介

  • 字符编码简介

    1.计算机编码的本质其实就是将我们人类能够听懂的语言通过编码的形式让计算机也能够听懂并帮我们运行和计算。
    2.计算机能够听懂的只有0和1两种形式。
    3.既然计算机能够听懂的语言只有两种那么我们想要计算机听懂我们的语言就应该给计算机预设一种编码形式可以翻译
    成计算既能够识别的语言也就是我们的字符编码
    

    image

字符编码发展史

  • 起源

    1.全世界第一台计算机"ENIAC"是在美国的宾夕法尼亚大学诞生的发明人是是美国人莫克利(JohnW.Mauchly)和艾克特
    (J.PresperEckert),由于是在美国发明的那么美国就像要发明一种编码形式可以让计算机听得懂英语,所以在1950年
    后期由美国国家标准协会制定的,标准的单字节字符编码方案就是我们初代使用的《ASCII》编码
    
    2.由于是在美国诞生的所以当时美国只发明了针对英文的编码方式,而英文所有的字符只有127(2**7)个所以他们只
    发明了八位字节编码,已预料可能需要增加否则七位即可。
    	ASCII码:内部只记录了英文字符与数字的对应关系
    	1bytes来存储字符
    	A-Z  65-90
    	a-z  97-122
    

    image

  • 百家争鸣

    1.由于二战后各个国家都在积极发展越来越多的国家都先后到富起来,计算机也来到了越来越多人的家庭里,但是由于
    当时计算机的编码预设只有ascii并没有记录别的国家的语言文字,所以越来越多的编码语言被发明出来出现了百家争
    鸣的情况。
    2.例如:
      中国  GBK编码格式  可以识别中文编码的格式,其中也包含了英文和数字
      韩国  Euc_kr编码格式  可以识别韩文编码的格式,同样包含英文和数字
      日本  shift_jis编码格式  可以识别日文编码格式,包含英文和数字
      越来越多的国家发明了自己的编码格式所以在双方互相交流时出现乱码的情况,所以急需一个将世界上所有的
      文字都进行编码的编码预设。
    

    image

  • 天下大同

    1.在混乱的编码系统下一款统一码诞生名叫unicode(万国码)
    2.1990年开始研发,1994年正式发布1.0版本,2021年9月14日发布14.0版本,是计算机科学领域里的一项业界标准,
    包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定
    了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求
    3.由于万国码拥有世界上所有的文字符号等所以他的体量也是很大的人们就发明了万国码的简化版(utf家族)
    4.在我们的计算机中内存使用unicode编码,硬盘使用的则是utf8编码预设
    

    image

字符编码操作

  • 解决乱码的措施

    解决乱码最基本的方式就是使用其原本的编码预设来运行使用该进程。(解铃还须系铃人)
    

    image

  • 编码与解码

    1.编码
    	编码的本质其实就是将人类的语言(例如中文)运用gbk编码预设将中文编码成计算机能够识别的010101
      并将这段编码传递给例如(美国)那边的接收端
    2.解码
    	解码的本质其实就是将别人发的编码(此时的语言时计算机可以识别的二进制语言)接受过来然后使用对方
      使用的编码预设来进行解码翻译成对方所需要表达的本意
    3.
      s1 ='待到秋来九月八,我花开后百花杀。冲天香阵透长安,满城尽带黄金甲。'
      data = s1.encode('gbk')
      print(data, type(data))
      res = data.decode('gbk')
      print(res)
      '待到秋来九月八,我花开后百花杀。冲天香阵透长安,满城尽带黄金甲。'
    

    image

  • 解释器层面

    1.python2.x
    	在python2中由于诞生的比较早那个时候还没有unicode所以自带的编码预设就是ASCII编码
    		如果需要在python2中使用utf-8的话那么应该在文件的开头处编写
            -*-  coding:utf-8  -*-
    		并在所有字符串前加(u)
    2.python3.x
    	在python3中默认的编码就是utf-8
    

文件操作简介

  • 什么是文件操作

    1.文件操作的本质其实就是使用编写代码来调用文件读写
    
  • 什么是文件

    1.文件就是计算机给你提供的一种最快调用硬盘的快捷方式,方便你从硬盘存取数据
    2.计算机的三层结构体
      用户/应用程序(open)
      文件(操作快捷打开)
      硬盘(调取数据)
    
  • 如何用代码操作文件

    使用open关键字打开文件后面需要跟(要打开的文件名+文件路径+字符编码格式)
    进入读写模式
    1.方式1
      f = open(文件名+路径+编码(utf-8))
      f.close
    2.方式2
      with open(文件名+路径+编码)as f:
      在with as 结构中运行结束后会自动使用close结束
    
  • 针对文件路径需要注意

    当你再调用文件时你可以会遇到路径与python特殊含义字符的冲突情况(字母和撬棍的组合)	
    那么就应该在这个路径前加一个(r)就可以取消特殊含义
    


这篇关于回收机制与编码预设的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程