zoukankan      html  css  js  c++  java
  • 垃圾回收机制、标记删除及分代回收

    垃圾回收机制

    # 不能被程序访问到的数据,就称之为垃圾

    引用计数

    # 引用计数是用来记录值的内存地址被记录的次数的

    # 每一次对值地址的引用都可以使该值的引用计数 +1
    # 每一次对值地址的释放都可以使该值得引用计数 -1

    # 当一个值的引用计数为0时,该值就会被系统的垃圾回收机制回收

    循环引用

    ls1 = [666]
    ls2 = [888]
    ls1.append(ls2)
    ls2.append(ls1)

    # 循环导入会导致某些值得引用计数永远大于0

    标记删除

    # 标记:标记的过程其实就是,遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,存放到新的内存空间中

    # 删除:删除的过程将遍历堆中所有的对象,将之前所有的内容全部清除

    分代回收

    # 分代:指的是根据存活时间来为变量划分不同等级(也就是不同的代)
    '''
    新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,接下来,青春代中的对象,也会以同样的方式被移动到老年代中。也就是等级(代)越高,被垃圾回收机制扫描的频率越低
    '''

    # 回收:依然是使用引用计数作为回收的依据

     

    正则

    # 正则:正则就是带语法的字符串,用来匹配目标字符串得到想要的字符串结果

    # 语法:
    # 1.单个字符
    # d == [0-9]
    # D == [^0-9]
    # w == 字母+数字+_
    # [0-9A-Za-z] == 所有字母+数字
    # . == 匹配所有单个字符(刨除换行)

    # 2.多个字符
    # zo* == zo{0,}
    # zo+ == zo{1,}
    # zo? == zo{0,1}

    # 应用
    # 匹配多个zo:zozozozo
    # (?:zo){1,}

    # 3.多行
    # ^: 以什么开头 $: 以什么结尾 结合 flags=re.M 可以按 来完成多行匹配
    # re.S:将 也能被.匹配 re.I:不区分大小写


    # 4.分组
    # 1.从左往右数数 ( 进行编号,自己的分组从1开始,group(0)代表匹配到的目标整体
    # 2.(?: ... ):取消所属分组,()就是普通(),可以将里面的信息作为整体包裹,但不产生分组
    regexp = re.compile('(?:(?:http://)(.+)/)')  # 生成正则对象
    target = regexp.match('http://www.baidu.com/')
    print(target.group(1))  # www.baidu.com

    # 5.拆分
    print(re.split('s', '123 456 789 000'))

    # 6.替换
    # 1.不参与匹配的原样带下 2.参与匹配的都会被替换为指定字符串
    # 3.在指定字符串值 um拿到具体分组 4.其他字符串信息都是原样字符串
    print(re.sub('《(?:[a-z]+)(d+)(.{2})', r'\2abc21', '《abc123你好》'))

     

     

     

  • 相关阅读:
    Spring框架概念
    git stash 用法总结和注意点
    Java虚拟机:对象创建过程与类加载机制、双亲委派模型
    办公软件技巧
    Zookeeper到底是干嘛的
    ANdroid Studio下载
    node.js网络(net)
    显示日期
    打包apk

  • 原文地址:https://www.cnblogs.com/maoruqiang/p/10723601.html
Copyright © 2011-2022 走看看