来来回回遇到一些问题,每次遇到都去找下资料,有时候还就想找到以前看过的某篇文章,然而就是找不到,很苦逼啊,于是还是开始自己理解记录下吧,好记性不如烂笔头真的说得好啊!
首先关于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();
}
内存分配是这样的:
参考这个知乎