美文网首页计算机微刊程序员
数据储存中堆、栈、静态区简析

数据储存中堆、栈、静态区简析

作者: 62071ce48dd8 | 来源:发表于2017-08-21 21:28 被阅读0次

之前和Jacky的交流收获很多,在这里对其中数据储存的问题做一个小结,Let's go.

创建对象是我们每天都会用到的,就像这个:

Employee emp=new Employee();

Employee中有两个私有属性id和name,加上Setters/Getters方法即可。

创建成功后我们就在内存中需要分配一个空间去储存,那么问题来了,上边这个式子中的每一部分究竟是储存在哪里呢,我用一张图来解释:

等式左边的emp被储存到了栈区,等式右边的new Employee()会在堆区开辟空间储存,而emp事实上只是一个地址符,它会指向堆区中真正对象的位置,对象中所包含的所有属性也都储存在堆区,说到这里,到底堆和栈通常都储存什么类型的数据呢?

其实,栈中存放是基本类型与引用类型,堆中存放的是对象类型与数组(当然数组也是对象类型)。

栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。

提到堆和栈就不得不再说说静态区,通常情况下,我们在需要全局变量的时候会用到static,还是之前的例子,在Employee的model中加这样一段代码:

public int count=0;

public Employee(){

count++;  }

然后在测试类中创建两次对象:

Employee emp1=new Employee();

System.out.println(emp1.count);

Employee emp2=new Employee();

System.out.println(emp2.count);

不难看出,打印的结果一定是两次1,但是如果用static修饰count,结果将变成1和2,那么用static修饰的全局变量究竟是储存在哪里呢,这样就出现了第三个储存区static静态区:

最后补充下static的三种用法:

1.static{  }直接在{ }中写入代码片段,会使在加载类时优先加载其中代码

2.static variate修饰变量,使变量作为全局变量

3.static method修饰方法,预加载方法,使用方法时无需创建对象

再说两句题外话,有经验的it工程师给出了一个方向:

A.Architect

B.Business

C.Coding

D.Design

E.English

每个人都有自己的理解吧,我也不再赘述了,攻城狮和程序猿也许就是方向不同呢,下功夫总会有收获的。

相关文章

  • 数据储存中堆、栈、静态区简析

    之前和Jacky的交流收获很多,在这里对其中数据储存的问题做一个小结,Let's go. 创建对象是我们每天都会用...

  • OC的五大内存区域

    栈区(stack)堆区(heap)全局区/静态区(BSS段和数据段)常量区代码区(代码段) 1、栈区 栈区:又称堆...

  • 存储空间

    编码世界有三类存储空间 堆 栈 静态存储区(也称为全局数据区) 堆,栈也称为动态存储区静态存储区数据一般是在编译期...

  • C++ 内存布局

    堆、栈、静态数据区、常量区、代码区以下是各个区的作用:(1)代码区:存放程序代码;(2)数据区a.静态数据区: 在...

  • 线性表和队列

    首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”。C语言的内存模型分为5个区:栈区、堆区、静态区、常量区、代码区...

  • 2021-03-14 理解GC算法,从算法看本质

    运行时数据区 方法区类信息静态常量 堆 程序计数器 本地方法栈栈帧局部变量表中包含指针 Java虚拟机栈 堆区逻辑...

  • Java 堆/栈 GC相关

    一、Java程序运行时的内存分配策略 静态分配[静态存储区]/栈分配[栈区]/堆分配[堆区] 1)静态存储区...

  • iOS内存分配五大区:

    iOS内存分配五大区: 栈区,堆区,静态区(全局区),常量区,代码区 动态数据区一般就是”堆栈”,栈是线性结构,堆...

  • 堆与栈 堆区和栈区的区别

    一、 栈和堆事数据结构中的叫法,栈区和堆区是进程的内存模型中的堆区和栈区 二 内存模型里堆区和栈区和数据结构没有关...

  • 9.内存分配

    内存:数据区 + 代码区 + 堆区 + 栈区 数据区:全局变量 静态变量 常量 (包括用const修饰的...

网友评论

    本文标题:数据储存中堆、栈、静态区简析

    本文链接:https://www.haomeiwen.com/subject/rdwhdxtx.html