栈什么时候弹栈取决于自我的回收和赋值,栈内部往往是根据线程池的调用有关 ,只有在线程缓存不够的情况下才会弹栈,否则将会等整个程序执行完毕之后才会弹栈。
一般情况下,一般都不会随便弹栈,因为操作的永远都是堆内存中的对象 和引用,只有当程序执行完毕之后,栈内才会自己由内到外弹出直到下一个程序开始,对于线程池的调用是由cpu来决定的,大部分情况下,某个程序在疯狂的吃线程成调度给它的线程,(就好比游戏中来了一个电话,当你转换打开这个电话的时候,这个游戏有可能就会挂掉,那么只能重新打开这个游戏才能重新玩)这就是线程池缓存区被榨干了,然后存储决策还会在硬盘上面生成缓冲区间,,这也就是为啥会有碎片的原因。
堆内存就是你的RAM 所要占用的内存,这里面内容很多,机器卡,内存太多这是前提,内存不多,应用无响应,ANR是CPU缓存满了,线程调度不过来,所以系统一般是先释放RAM 缓存,再释放 CPU 缓冲区