Android 内存的一些小知识点
来源:互联网 发布:vb 时间函数 编辑:程序博客网 时间:2024/06/05 14:08
首先了解一下堆(Heap)和栈(Stack)
百度百科:在计算机领域中,堆栈是一个不容忽视的概念,堆栈都是一种数据项按序排列的数据结构,只能在一端对数据项进行插入和删除。要点:堆,队列优先,先进先出(FIFO);栈,后进先出(FILO)。
Stack空间(进栈和出栈)由操作系统控制,主要存储函数地址、函数参数、局部变量等等,所以Stack空间不需要很大。
Heap空间由程序控制,程序员可以操作这片地址空间。Heap为程序完成各种复杂任务提供内存空间,所以空间比较大。正是因为Heap空间由程序员管理,所以容易出现使用不当导致严重问题。
Android里的Native内存和Dalvik内存
Android里的进程一般有两种:native进程(采用C/C++实现)和java进程(Android中运行于dalvik虚拟机上的进程)。dalvik虚拟机的宿主进程由fork()系统调用创建,所以每一个java进程都是存在于一个native进程中。
dalvik内存:是指dalvik虚拟机所使用的内存。
native内存:是被native使用的内存。应该指使用C\C++分配的内存。
我们一般只需要关心Android中进程的堆(Heap)内存。因为上面已经提过,heap空间才是完全由我们程序员控制的的,我们使用的malloc、C++ new和java new所申请的空间都是heap空间, C/C++申请的内存空间在native heap中,而java申请的内存空间则在dalvik heap中。
这里我们用一张图大致看一下我们实际开发中申请的数据的存放位置:
不过需要注意的是:虽然Bitmap对象是使用java native方法创建的,但是其实它会被分配到dalvik heap中,所以过多地创建bitmap对象会导致OOM异常,这是因为Android系统对dalvik的vm heapsize做了硬性限制,当java进程申请的java空间超过阈值时,就会抛出OOM异常(这个阈值可以是48M、24M、16M等,视机型而定)。
参考:
- 浅谈Android内存管理
- Android 内存的一些小知识点
- Android的一些小知识点
- android的一些小知识点
- Android 小笔记 一些小的知识点
- android平时编码的一些小知识点
- Android中一些小的知识点
- Android中的一些小知识点
- android 堆内存的一些小知识
- Android开发中的一些小的知识点总结
- RSS的一些小知识点
- JSP的一些小知识点
- 一些有用的小知识点
- java的一些小知识点
- C++的一些小知识点
- Javascript的一些小知识点
- AFNetworking的一些小知识点
- jquery的一些小知识点
- 一些小知识点的累积
- 每日AC--gas-station--LeetCode
- [编程基础题总结]
- 创建WPF不规则窗口
- JavaWeb 服务启动时,在后台启动加载一个线程
- JSP语法
- Android 内存的一些小知识点
- Web前端开发精品课HTML CSS JavaScript基础教程第六章课后编程题答案
- 第二届全国智能制造(中国制造2025)创新创业大赛华南人工智能专项赛决赛圆满举办
- Scala 之构造器(六)
- php开发过程案例一
- PHP生成带有logo和底图的支付二维码
- Android蓝牙开发【六】hfp连接
- 将 Azure VM 迁移到 Azure 中的托管磁盘
- 数据分析基础(1)