Android内存管理

发布时间:2023-05-04 10:41:00

概述 在android的开发中,主要内存的分配和垃圾回收应始终存在,因为系统为每个dalvik虚拟机分配的内存有限。在googleG1中,最大的分配量只有16M,后来的机器一般是24M,真的很差。这就要求我们在开发过程中时刻注意。不要因为自己的代码问题而导致OOM错误。JAVA内存管理 众所周知,android应用层是由java开发的,android的davlik虚拟机与jvm相似,但它是基于寄存器的。因此,要了解android的内存管理,必须了解java的内存分配和垃圾回收机制。 在java中,内存是通过new关键字分配给对象的,内存的释放是由垃圾收集器释放的(GC)在开发过程中,工程师不需要对内存进行显式管理。然而,这可能会在不知不觉中浪费大量的内存,最终导致java虚拟机花费大量的时间回收垃圾。更严重的是,JVM的OOM。因此,Java工程师仍有必要了解Java的内存分配和垃圾回收机制。内存结构 上图为JVM结构图,主要由四部分组成:Class Loader子系统和执行引擎,操作方法区和本地方法区. 让我们来看看RUNTIMEE DATA AREA区,也就是我们常说的JVM内存。 从图中可以看出,RUNTIMEDATA AREA区主要由五个部分组成:Method Area:存储在Method中的装载class元信息 在Area中,它是线程共享的Heap(堆):java虚拟机实例中只存在一堆空间,存储一些对象信息,是线程共享Java栈:Java虚拟机直接操作Java栈,本地方法栈(非线程共享)JVM垃圾回收以帧为单位的压栈和出栈(非线程共享)程序计数器(非线程共享)。(GC) JVM的垃圾原理是这样的。它将对象分为年轻人(Young)、年老代(Tenured)、持久代(Perm),使用不同的垃圾回收算法来回收不同生命周期的对象。年轻代(Young) 年轻一代分为三个区,一个eden区,两个Survivor区。程序中生成的大部分新对象都在Eden区域。当Eden区域满时,仍然存活的对象将被复制到其中一个Survivor区域。当Survivor区域的对象占用空间满时,该区域的存活对象将被复制到另一个Survivor区域,当Survivor区域满时,从第一个Survivor区复制并在此时生存的对象将被复制到老年人。年老代(Tenured) 老年人储存在上述年轻一代复制的对象中,即在年轻一代仍然存活的对象中,而且该地区充满了复制。年老代(Tenured) 老年人储存在上述年轻一代复制的对象,即在年轻一代仍然存活的对象,而且该地区充满了复制的对象。一般来说,老年人的生命周期相对较长。持久代(Perm) 用于储存静态类别和方法的持久代对垃圾回收没有显著影响

上一篇 offer Java基础精选从编译到集合
下一篇 LeetCode面试题:解码方法

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题