python的内存管理机制
python的内存管理机制主要分为三个部分:引用计数、垃圾回收和内存池机制。
引用计数机制:
python通过维护每个对象的引用计数来跟踪内存中的对象。当对象被创建时就会有一个引用计数,当对象不再被使用时,引用计数为0,python就会自动释放该对象所占用的内存。引用计数的python内存管理机制的基础。
通过它可以快速的回收不再被使用的对象。
Python使用引用计数来跟踪对象的引用情况。每当一个对象被引用时,它的引用计数就会加1;
当一个对象的引用被删除时,它的引用计数就会减1。当一个对象的引用计数为0时,说明没有任何引用指向它,这时垃圾回收机制会将其所占用的内存释放掉。引用计数是一种简单而高效的内存管理方式,但它无法解决循环引用的问题。
import sys
a =[]
b=a
count = sys.getrefcount(a)
print( count )
#a 的引用计数值为 3,因为有 a、b 和作为 refcount 都引用了一个空列表
垃圾回收机制(简称GC garbage collection):
python使用垃圾回收器来清理那些引用计数为0的对象所占用的内存。
python中的垃圾回收机制主要有两种:标记清除和分代回收。
标记清除是python最早的垃圾回收算法
分代回收是pyton的另一种垃圾回收算法,它将内存分为三代,每一代的存活时间越长,就越不容易被回收。
除了引用计数外,Python还使用垃圾回收机制来处理循环引用等无法通过引用计数解决的内存管理问题,垃圾回收机制会定期检查程序中的对象,找出那些没有被引用的对象,并将其释放掉。Python使用的垃圾回收算法是基于分代的垃圾回收算法,即将对象分为不同的代,根据对象的存活时间来决定何时进行垃圾回收。一般情况下,新创建的对象会被分配到第0代,如果经过一定的时间后仍然存活,则会被晋升到下一代。垃圾回收机制会根据不同代的对象进行不同频率的回收,以提高垃圾回收的效率。
内存池机制:
python中的内存池是一个缓存区,用于管理小于256个字节的对象的内存分配。
当对象的大小小于256K时,python会使用内存池进行内存分配,
否则就会直接调用C标注库中的malloc/realloc等函数进行内存分配。
内存池的作用就是避免了频繁地进行内存分配和释放,从而提高了程序的执行效率。
Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统
对于Python对象,以下几种情况,都有其独立的私有内存池。(字符串的驻留机制)
1、字符串长度为0或者1
2、符合标识符的字符串(只包含字符数字下划线)
3、字符串只在编译时进行驻留,而非运行时
4、[-5,256]之间的整数数字
怎么优化内存管理
手动垃圾回收
先调用del a;再调用gc.collect()即可手动启动GC(嵌套的引用删除不了,因为引用计数为1)
调高垃圾回收阈值
gc.set threshold 设置垃圾回收阈值(收集频率)
避免循环引用
相关文章:
python的内存管理机制
python的内存管理机制主要分为三个部分:引用计数、垃圾回收和内存池机制。 引用计数机制: python通过维护每个对象的引用计数来跟踪内存中的对象。当对象被创建时就会有一个引用计数,当对象不再被使用时,引用计数为0,…...
阿布量化:基于 Python 的量化交易框架
阿布量化(AbuQuant) 是一个开源的量化交易框架,专为金融领域的研究者和交易者设计。它基于 Python 语言开发,提供了一整套从数据获取、策略开发、回测分析到交易执行的解决方案。阿布量化不仅能够帮助用户快速实现量化策略的设计与…...
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28目录前言1. Cognitive phantoms in LLMs through the lens of latent variables摘要研究背景问题与挑战创新点算法模型实验效果…...
【tower-boot 系列】开源RocketMQ和阿里云rockerMq 4.x和5.x集成 (一)
RocketMQ 简单介绍 阿里云rockerMq 4.x和5.x集成 一、云平台创建实例 参考文档: 阿里云api 阿里云 创建实例 二、skd集成思路 公司用的RocketMQ一般是自建开源apache的RocketMQ和上阿里云的RocketMQ,目前阿里云支持4.x和5.x版本 项目集成思路&…...
Pikachu-Cross-Site Scripting-反射型xss(post)
查看源代码 ,这是需要先登录,然后再去做xss攻击 使用admin ,123456 登陆; 登陆后,输入的message 内容直接返回 输入 <script>alert(1)</script> 得到xss攻击结果...
Vue3 工具函数(总结)
目录 前言 1.isRef 2.isReactive 3.isReadonly 4.isProxy 5.toRef 6.toRefs 7.unref 8.shallowRef 9.shallowReactive 10.triggerRef 11.customRef 12.markRaw 13.toRaw 14.readonly 15.watchEffect 前言 在 Vue 3 中,除了核心的响应式 API&#x…...
(undone) MIT6.824 Lab1
参考:http://nil.csail.mit.edu/6.824/2021/labs/lab-mr.html task1: 熟悉讲义,尤其是搞明白如何运行测试程序(完成) ------------------------------------------------ start 先看 Introduction 我们的目标:构建一个MapReduce系统。 细节&…...
SpringMVC——REST
路径请求方式请求行为 查询:GET 新增:POST 修改:PUT 删除:DELETE 有重复的东西怎么办...
【牛客网刷题记录】【java】二叉树
(1)二叉树的前中后遍历 最基本的树的遍历,不会可以重开了 public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param root TreeNode类 * return int整型一维…...
一文讲透大语言模型构建流程
最近已有不少大厂都在秋招宣讲了,也有一些在 Offer 发放阶段。 节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…...
VR视频怎样进行加密和一机一码的使用?--加密(一)
在视频加密领域,我们常见接触的就是在普通设备上使用的加密视频,如电脑、手机、平板等。Vr的发展和兴起给人们带来最真实的体验感受,不仅在游戏行业应用较广,在一些影院或者元宇宙文旅、展厅等视频场景也备受青睐。 随着VR视频场景…...
Ubuntu启动后第一次需要很久才能启动GTK应用问题
Ubuntu启动后第一次需要很久才能启动GTK应用问题 自从升级了 Ubuntu 之后,设备重启,发现打开 Terminal 、Nautilus 以及其他的GTK 应用都很慢,需要至少一分钟的时间启动。 刚开始也是拿着 journalctl 的异常日志去寻找答案,但是没…...
栏目二:Echart绘制动态折线图+柱状图
栏目二:Echart绘制动态折线图柱状图 配置了一个ECharts图表,该图表集成了数据区域缩放、双Y轴显示及多种图表类型(折线图、柱状图、象形柱图)。图表通过X轴数据展示,支持平滑折线展示比率数据并自动添加百分比标识&…...
Gromacs——使用过程中暴露问题分析及学习
gromacs——突变残基蛋白电场MD和基本分析从入门到发SCIENCE:基于Gromacs的蛋白小分子动态模拟全过程解析水溶性蛋白模拟全过程:从准备蛋白结构文件(top、itp、gro文件生成)到模拟数据分析GromacsGROMACS 教程:蛋白配体…...
Webpack模式-Resolve-本地服务器
目录 ResolveMode配置搭本地服务器区分环境配置 Resolve 前面学习时使用了各种各样的模块依赖,这些模块可能来自于自己编写的代码,也可能来自第三方库,在 Webpack 中,resolve 是用于解析模块依赖的配置项,它决定了 We…...
【LLM论文日更】| 通过指令调整进行零样本稠密检索的无监督文本表示学习
论文:https://arxiv.org/pdf/2409.16497代码:暂未开源机构:Amazon AGI、宾夕法尼亚州立大学领域:Dense Retrieval发表:Accepted at DCAI24 workshopCIKM2024 研究背景 研究问题:这篇文章要解决的问题是如…...
02.01、移除重复节点
02.01、[简单] 移除重复节点 1、题目描述 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 2、解题思路 为了实现这一目标,我们可以使用一个哈希表(或集合)来记录已经遇到的节点值,逐步遍历链表并删…...
旅游推荐|旅游推荐系统|基于Springboot+VUE的旅游推荐系统设计与实现(源码+数据库+文档)
旅游推荐系统 目录 基于java的旅游推荐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师…...
github项目--crawl4ai
github项目--crawl4ai 输出html输出markdown格式输出结构化数据与BeautifulSoup的对比 crawl4ai github上这个项目,没记错的话,昨天涨了3000多的star,今天又新增2000star。一款抓取和解析工具,简单写个demo感受下 这里我们使用cra…...
仅有N卡独显的情况下安装ubuntu是遇到的黑屏,加载卡顿等问题
Ubuntu安装的两个阶段都要进行一定的设置来临时禁用掉独显或者ubuntu的通用显卡驱动。 U盘启动阶段 U盘启动阶段要对U盘启动项进行设置,通过BIOS设置第一boot为USB hard disk后可以进到U盘引导项,第一项为 “try or install ubuntu”,倒计时10s后自动进入。 这个时候不要…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...
