android native区的大小,Android性能优化----内存篇

作为运行在Linux内核上的移动设备,手机受限于内存的大小,给每一个app都只能分配有限的可用内存,如果开发者的代码编写不当,可能导致应用的内存泄漏,进而导致OOM内存溢出(程序申请内存,但是系统无更多可用空间)。

为了避免内存泄漏,需要我们在平时的代码编写上多加注意,避免产生内存泄漏的情况。可用LeakCanary监控你的应用,当发生内存泄漏的时候他会在适当的时间给你发出警告。当然,这只是一种监控工具,我们还是需要知道如何去处理这个泄漏,并且要知道为什么会产生泄漏。

在java里,内存的释放虽然不需要我们手动去管理,但是对于存在引用的对象,java并不会去释放它,在这块java有两种机制去判断对象是否存在引用:

1.计数器,对象每引用一次就+1,当对象的引用计数为0时,判断该对象为垃辣鸡,赶快把它解决掉吧。但是这种方法对应对象间的相互引用可不好用了。

2.可达性判断,从GCRoot根部判断是否有能到达该对象的路径,如果有,则判断为该对象有引用,不能回收了。

可作为GC Roots的对象有:

1.虚拟机栈(栈帧中的本地变量表)中引用的对象;

2.方法区中的类静态属性引用的对象;

3.方法区中常量引用的对象;

4.本地方法栈中JNI(即一般说的Native方法)中引用的对象

Java内存分配策略

对象优先在Eden分配

大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次 Minor GC

你可能感兴趣的:(android,native区的大小)