动态存储区(栈、堆)、静态存储区(数据段和程序段)

   动态区域(栈、堆)、静态存储区(数据段和程序段)

    动态存储区(栈、堆)、静态存储区(数据段和程序段)

 

   

1 类成员变量存放在堆区,所有类的实例和数组都是在堆上分配内存的,堆内存由存活和死亡的对象,空闲碎片区组成,对象所占的堆内存是由自动内存管理系统回收;

2 堆允许程序在运行时动态地申请某个大小的内存。

3 一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。

由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。

全局区(静态区)(static)

1 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,   未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。  

2 方法区又叫静态存储区,存放class文件和静态数据,线程共享

文字常量区

1 常量占用内存,只读状态,决不可修改

2 常量字符串就是放在这里的,程序结束后由系统释放常量 

3 常量区放未经new的常量

程序代码区

存放函数体的二进制代码,所有的语句编译后会生成CPU指令存储在代码区.

数据段

由三部分组成:

1 只读数据段
只读数据段是程序使用的一些不会被更改的数据,使用这些数据的方式类似查表式的操作,由于这些变量不需要更改,因此只需要放置在只读存储器中即可。一般是const修饰的变量以及程序中使用的文字常量一般会存放在只读数据段中。
2 已初始化的读写数据段:
已初始化数据是在程序中声明,并且具有初值的变量,这些变量需要占用存储器的空间,在程序执行时它们需要位于可读写的内存区域内,并且有初值,以供程序运行时读写。在程序中一般为已经初始化的全局变量已经初始化的静态局部变量(static修饰的已经初始化的变量)
3 未初始化段(BSS):
未初始化数据是在程序中声明,但是没有初始化的变量,这些变量在程序运行之前不需要占用存储器的空间。与读写数据段类似,它也属于静态数据区。但是该段中数据没有经过初始化。未初始化数据段只有在运行的初始化阶段才会产生,因此它的大小不会影响目标文件的大小。在程序中一般是没有初始化的全局变量没有初始化的静态局部变量

 

linux进程的内存空间按照从高到低的顺序,存储的依次是

  1. stack 
  2. heap
  3. bss segment  
  4. data segment  
  5. code segment/text segment