数据区、代码区、栈区、堆区
来源:互联网 发布:搜狐mac手写键盘关闭 编辑:程序博客网 时间:2024/05/17 06:41
简介
1.栈区(stack):由系统的编译器自动的释放,主要用来存放方法中的参数,一些临时的局部变量等,并且方法中的参数一般在操作完后,会由编译器自动的释放掉。
2.堆区(heap):由程序员决定,在Java中,如果程序员不释放的话,一般会由垃圾回收机制自动的清理掉。此区域主要用来存放我们经常创建的对象、动态的申请的临时空间等。
3.数据区(data seg):也称全局区或者静态区,根据名称我们就应该知道用来存放一些全局的东西,比如我们经常用到的静态变量、全局变量等都会存放到数据区,此区域上的东西都被全局所共享。比如我们可以采取类名.的方式就可以访问到方法,这就是所谓的静态方法,存放到数据区的。
4.代码区:存放程序编译后可以执行代码的地方。比如执行代码时写的While语句、if条件语句等,都会存放到此。
内存分析
有了以上的分析基础,下面来一个简单的内存分析,先看一下示例代码
实例代码
<span style="font-family:SimSun;font-size:18px;"> /// <summary> /// Person类 /// </summary> class Person { //变量 int id; int age = 20; Person(int _id, int _age) { id = _id; age = _age; } }</span>
分析
上面就是简单的定义了一个Person类,然后写了一个简单的构造函数,来为变量初始化值,下面来执行一下,看一下内存中的分布图
执行语句:Person tom = new Person(1,25);
第一步:
我们知道每一个类都有一个默认的构造函数,即Person(),因此上述会先调用默认的构造函数
第二步:执行构造函数New Person(1,25)时,我们知道调用的是Person(int _id, int _age),所以此时栈空间会分配方法的参数的临时变量如下
第三步:执行构造函数 Person(int _id, int _age),id = _id; age = _age;此时栈中的临时变量会改变默认构造函数创建的对象,赋值完后,栈中的临时变量会自动的销毁,然后创建的临时变量Tom会自动的指向创建的对象。
以上就是整个流程的执行过程!
- 数据区,代码区,堆区,栈区
- 数据区 代码区 堆区 栈区
- 数据区,代码区,堆区,栈区
- 数据区,代码区,堆区,栈区
- 数据区、代码区、栈区、堆区
- 数据段、代码段、栈区、堆区
- C语言拾遗:数据区,代码区,堆区,栈区
- 数据区之代码段、数据段、堆、栈
- C中的静态数据区、代码区、堆、栈
- c++内存分布,代码段、全局数据区、栈、堆
- 5.1.堆、栈、数据区、bss、代码段
- 代码区,初始化全局数据区,BSS,堆区,栈区,程序环境变量区简介
- C/C++堆区、栈区、常量区、静态数据区、代码区详解
- 代码区,初始化全局数据区,BSS,堆区,栈区,程序环境变量区简介
- 查看DEVC++程序运行的代码区、数据区、栈区、堆区的地址
- 全局区 代码区 堆区 栈区
- 堆区、栈区、全局区、代码区
- 关于“代码区,全局数据区,堆区,栈区”和“ 栈区,堆区,全局/静态存储区,常量存储区”两种不同的说法
- 2015移动应用设计趋势建议白皮书
- 巴菲特规则
- Baumer相机BGAPI_ImageHeader Member List
- 浅谈软件工程与云计算
- linux下如何将多个文件压缩打包成.tar.gz
- 数据区、代码区、栈区、堆区
- Oracle数据库监听SQL语句性能
- PCI-E
- 获取系统临时目录
- 思科nexus虚拟交换之开机初始化配置(Nexus7K、Nexus5K等)
- maven安装一
- 图像的一维熵和二维熵
- PL/SQL 集合 -- 嵌套表
- HashTable(哈希表分离链接法)