我很困惑Android的内存是如何构建和管理的。我想了解内存在应用程序之间划分和共享的方式。
据我所知,到目前为止,每个应用程序都分配了自己的Dalvik内存堆,它具有严格的上限。这是使用并发标记和清除垃圾收集机制来管理的。
1)我的问题是,应用程序中只使用“堆”,还是每个应用程序都有“堆栈”?我读到here每个进程都有一个堆栈和一个堆(并且复制GC在堆上工作)。这个堆栈在哪里?它用于什么?
2)链接还说CMS是在堆栈上使用的,这对我来说没有意义,因为不会通过堆栈元素顺序杀死LIFO点?在这种情况下不需要压缩吗?3)此外,当进程共享内存(ashmem)是实现为共享堆还是共享堆栈时?
答案 0 :(得分:3)
对不起,我不明白你的第三个问题,但我可以回答第一个和第二个问题:
1)每个Android应用程序都有堆栈和堆用于内存分配,对象,例如 String 分配在堆,而原始变量,例如 int , char 在堆栈上分配强>
2)CMS是一种垃圾收集算法,用于自动管理堆上的内存。因此不能用于堆栈。