PythonStudy——内存管理机制 Memory management mechanism
一、变量与对象
关系图如下:

1、变量:通过变量指针引用对象
变量指针指向具体对象的内存空间,取对象的值。
2、对象:类型已知,每个对象都包含一个头部信息(头部信息:类型标识符和引用计数器)
注意:
变量名没有类型,类型属于对象(因为变量引用对象,所以类型随对象),变量引用什么类型的对象,变量就是什么类型的。
eg:
在Python37解释器中:
In [32]: var1=object
In [33]: var2=var1 In [34]: id(var1)
Out[34]: 139697863383968 In [35]: id(var2)
Out[35]: 139697863383968
在JetBrain中:
var1 = object
var2 = var1 print(id(var1))
print(id(var2))
输出:

PS:id()是python的内置函数,用于返回对象的身份,即对象的内存地址。

在内存中:
示例1:

示例2:

示例3:
In [39]: a=123
In [40]: b=a In [41]: id(a)
Out[41]: 23242832 In [42]: id(b)
Out[42]: 23242832 In [43]: a=456 In [44]: id(a)
Out[44]: 33166408 In [45]: id(b)
Out[45]: 23242832
3、引用所指判断
通过 is 进行引用所指判断,is是用来判断两个引用所指的对象是否相同。
示例:
整数:
In [46]: a=1
In [47]: b=1
In [48]: print(a is b)
True
短字符串:
In [49]: c="good"
In [50]: d="good"
In [51]: print(c is d)
True
长字符串:
In [52]: e="very good"
In [53]: f="very good"
In [54]: print(e is f)
False
列表:
In [55]: g=[]
In [56]: h=[]
In [57]: print(g is h)
False
由运行结果可知:
1、Python缓存了整数和短字符串,因此每个对象在内存中只存有一份,引用所指对象就是相同的,即使使用赋值语句,也只是创造新的引用(在内存的栈区内创建新的内存空间),而不是对象本身(对象依然存在于堆区),id相同;
2、Python没有缓存长字符串、列表及其他对象,即使由多个相同的对象,可以使用赋值语句创建出新的对象,id不同。
查看id()的源码:

def id(* args,** kwargs):#真正的签名未知
“””
返回对象的标识。 这保证在同时存在的对象中是唯一的。
(CPython使用对象的内存地址。)
“””
通过
在 Java中获取对象的内存地址方法 如下:

二、内存池
Python中有分为大内存和小内存:(256K为界限分大小内存)
1、大内存使用malloc进行分配
2、小内存使用内存池进行分配
3、Python的内存池(金字塔)
第3层:最上层,用户对Python对象的直接操作
第1层和第2层:内存池,有Python的接口函数PyMem_Malloc实现-----若请求分配的内存在1~256字节之间就使用内存池管理系统进行分配,调用malloc函数分配内存,但是每次只会分配一块大小为256K的大块内存,不会调用free函数释放内存,将该内存块留在内存池中以便下次使用。
第0层:大内存-----若请求分配的内存大于256K,malloc函数分配内存,free函数释放内存。
第-1,-2层:操作系统进行操作

借鉴:https://www.cnblogs.com/geaozhang/p/7111961.html
PythonStudy——内存管理机制 Memory management mechanism的更多相关文章
- PythonStudy——Python 内存池机制 (Memory pool mechanism) Pymalloc
Python是如何进行内存管理-内存池机制 Pymalloc Python引用了一个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),用于对小块内存的申请和释 ...
- Android内存管理机制之一:low memory killer
转载自http://www.miui.com/thread-29268-1-1.html 准备写这个专题之前,心里是有点忐忑的.首先Android内存管理机制相当复杂,想要讲清楚比较困难:其次对于绝大 ...
- 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制
今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...
- python的内存管理机制
先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量 ...
- C#中垃圾回收与内存管理机制
今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...
- Thermostat:双层存储结构的透明巨页内存管理机制
这是一篇由密歇根大学的Neha Agarwal 和 Thomas F. Wenisch,发表在计算机系统顶会ASLOS的论文,Thermostat: Application-transparent P ...
- 【JVM】5、JVM内存管理机制
转自:http://blog.csdn.net/lengyuhong/article/details/5953544 近期看了看Java内存泄露的一些案例,跟原来的几个哥们讨论了一下,深入研究发现JV ...
- Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches Slab内存管理机制 SLUB内存管理机制
Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches Slab内存管理机制 SLUB内存管理机制 http://w ...
- Python 源码剖析(六)【内存管理机制】
六.内存管理机制 1.内存管理架构 2.小块空间的内存池 3.循环引用的垃圾收集 4.python中的垃圾收集 1.内存管理架构 Python内存管理机制有两套实现,由编译符号PYMALLOC_DEB ...
随机推荐
- FI 创建资产接口AS01
FUNCTION ZREIP_CREATE_AS01TSET. *"------------------------------------------------------------- ...
- WebApi实现验证授权Token,WebApi生成文档等(转)
using System; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Security; ...
- Ajax+Struts2用户注册功能实现
详细请参考源码(Github):https://github.com/QQ3330447288/ajaxRegister 1.目录结构 2.截图 3.核心代码: register.jsp <sc ...
- idea启动springboot项目 报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;
有一次启动springboot项目的时候,报了一个非常奇怪的错误,说是找不到servletContext,springboot不是自带tomcat的吗? 在网上找了好久,说是用以下方式解决. 解决方式 ...
- grpc(三)之grpc客户端使用连接池
本文使用commons-pool2来实现连接池应用 1.定义一个产生连接池的工厂,需要继承BasePooledObjectFactory,其用处是生产和销毁连接池中保存的对象.根据需求,现在池子里保存 ...
- C#Windows窗体中添加了AxWindowsMediaPlayer的详细用法影响键盘操作的问题
最近在写一个飞机大战游戏,但在为游戏背景添加声音的时候,发现添加了AxWindowsMediaPlayer的详细用法音乐控件不能再通过键盘控制飞机的移动了,在网上查了许久,没找到原因,差点就想去找老师 ...
- Jboss解决只能通过localhost访问而不能使用IP访问项目的问题
之前项目都是前后端完全分离,很少使用到后端语言的开发工具,最近使用intellij+Jboss进行项目部署开发,初始用发现项目启动后只能使用localhost进行项目访问,IP地址访问则提示页面404 ...
- System.Web.WebPages.Html.HtmlHelper”不包含XXXX
1.关闭Visual Studio中 2.删除bin和OBJ文件夹 3.重新打开您的解决方案
- 生成器yield
#!/usr/bin/python#coding=utf-8'''Created on 2017年11月23日 from home @author: James zhan ''' def counte ...
- 网络编程-day1
一. *** C/S架构:客户端(client)/服务端(server)架构, B/S架构:浏览器(browser) / 服务端(server)架构 软件cs架构:浏览器,qq,微信,陌陌等等 硬件c ...