Python

Python--内存分析和处理

2018-08-22  本文已影响0人  用1心

2018-08-22
1.1 必要性:
  软件程序在计算机及中的运行,主要是通过数据单元、控制单元、执行单元共同协作,完成程序处理数据的交互,达到程序处理数据的目的。
  在软件执行过程中,由于系统内存和CPU的资源非常有限,所以有效的分解软件中的各项数据,将不同的数据加载到不同的内存部分,以有效的运行程序,同时可以达到在一个计算机中更高效、运行更多软件的目的。

1.2 操作过程:
  python程序在运行时,主要是python解释器先从系统中申请需要的内存空间,在用来运行python软件。
  解释器会把申请的内存主要划分为以下几个部分,以达到节省内存资源的目的。

image.png

  栈内存区[stack]:用于直接分配数据,存储速度较快,数据储存不稳定法,适用于小数据块的快速存取,一般在程序中用于--存储变量数据。
  方法区[data]:主要用于加载小程序中使用的代码数据、二进制数据、方法数据等程序 运行需要的预加载数据。
  静态区[static]:主要用于加载存储程序中的一些静态变量、常量数据等。在python中,不可变数据类型的数据,也会存储到静态常量区内存中。
  堆内存[heap]:存储数据稳定持久,一般用于存储加载较为重量级的数据,如程序运行过程中的对象都是存在堆内存中的。

程序中变量和对象的基本表示方式:
  程序中建立一个Hero类,并创建hero对象。 内存的分配方式如下:


image.png

1.3 可变/不可变数据类型在内存中的分配:
  Python 根据数据是否可以进行更改,提供了两种不同的数据类型:
  可变数据类型:一般组合数据类型(列表、集合、字典等),或自定义数据类型都是可变数据类型
  不可变数据类型:一般基本数据类型都是不可变数据类型。

我们可以通过 id(变量名称) 查看对象在内存中的地址。
  可变数据类型在定义了数据之后,修改变量的数据,内存地址不会发生改变
  不可变数据类型是在定义了数据之后,修改变量的数据,变量不会修改原来的内存地址的数据,而是指向新的地址,原有的数据保留,这样更方便程序中基本数据类型的利用率。

image.png

2.1 代码和代码块
  python中最小的运行单元是代码块,每个代码运行会独立申请一次内存,在交互模式没有退出的操作过程中,遵循python的官方操作标准
如:对基本数据类型进行基本优化,将一定范围内的数据存储在常量区内以提升性能。

image.png

但在IDE开发模式下,代码封装在模块中,通过python命令运行模块时,模块整体作为一个代码块向系统申请内存并执行程序,执行过程中,对于基本数据类型进行缓存优化操作。
Pycharm工具代码测试:

image.png
上一篇下一篇

猜你喜欢

热点阅读