关于堆栈的区别(Java)iOS应该也差不多

来来回回遇到一些问题,每次遇到都去找下资料,有时候还就想找到以前看过的某篇文章,然而就是找不到,很苦逼啊,于是还是开始自己理解记录下吧,好记性不如烂笔头真的说得好啊!

首先关于iOS中的堆栈问题:

1.堆栈是跟内存有关的,那么对于移动设备而言,内存是有限的,一下行为都会增加内存

  • 创建一个OC对象
  • 定义一个变量
  • 调用一个函数或者方法

2.但是呢,内存对这些的管理方式是不一样的

  • 只有OC对象需要进行内存管理
  • 非oc对象类型比如基本数据类型不需要进行内存管理

3.在OC

  • OC对象存放于堆里面(堆内存要程序员手动回收)
  • 非OC对象一般放在栈里面(栈内存会被系统自动回收)
    堆里面的内存是动态分配的,所以也就需要程序员手动的去添加内存、回收内存
接下来是Java中堆栈的问题
  • java内存是分为堆,栈和方法区。
  • 堆中分配的是对象,也就是new出来的东西。
  • 栈中分配的是基本类型和自定义对象的引用。
  • 方法区存放的是类信息和static变量。比如说你在方法里有一个String a=new String("123"),就会先在堆里创建一个“123”的对象,然后再把这个对象的引用放到栈里面。

举个例子:

public void Method1()
{
    int i = 4;
    int y = 2;
    class1 cls1 = new class1();
}

内存分配是这样的:

11.jpg

参考这个知乎

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,646评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,145评论 1 32
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,217评论 30 472
  • 前言 不知道大家有没有这样一种感觉,程序员的数量井喷了。可能是因为互联网火了,也可能是各家培训机构为我们拉来了大量...
    活这么大就没饱过阅读 2,755评论 6 25
  • 无知使我丧失了斗志 即使是这样我也不会放弃 每当我郁郁不得志 当我找不到存在的意义 我都会自我淫意 我要万人拥我而...
    且把诗词抵酒债阅读 186评论 0 0