看了下,上次学习android还是17年的事情,,,,两年过去了我现在终于来搞android了。。。
以下内容参考自:《Android从学习到产品》,《深入理解java虚拟机》,《操作系统之哲学原理》
先甩一部分定义:
1.每一个Activity都可以启动另一个Activity来完成不同的动作,每一次一个Activity启动,前一个Activity就停止了,但是系统保留一个Activity在一个栈上(Back stack)。当一个新的Activity启动时,它会被推送到栈顶,取得用户焦点。Back Stack 符合简单的“后进先出”原则,所以当用户完成当前Activity后单击Back按钮,它会被弹出栈(并且被摧毁),然后之前的Activity恢复。
这里延申一下(猜测,没有看过具体的Android底层,不确定是不是准确的),这个Activity存储的back stack 应该是jvm中的VM Stack。
同步一下VM Stack是什么,就要讨论jvm的运行,java虚拟机在执行java程序的过程中,会把它所管理的内存划分为若干个不同的数据区域,VM Stack是其中一个区域。
VM Stack (java virtual machine stacks)是线程私有的,他的生命周期与线程相同。(线程概念补充一下:运行中的程序叫进程,一个进程占有一段内存来执行这个程序,一个进程我们可以拆分为多个线程,多个线程使用同一段内存空间来协同工作完成进程。线程是进程里面的一个执行上下文,或者执行序列。对于单核来说,一个时间段只能handle一个线程,多核可以有多个线程同时执行,从而提高进程的执行速度)
VM stack 描述的是java方法执行的内存模型:每个方法执行的同时都会创建一个栈帧(stack Frame)用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
那么对于Android来说,内存泄漏的场景有:1.Activity过多,内存占满,无法创建新的Activity对象;2.多个Activity单例化后,一直占据内存资源,无法释放;
具体怎么做的还没有头绪,等开发完了再研究吧。