内存、线程一点想法
2016-03-05 02:53
183 查看
一、内存
(一)内存的复用
CPU读写内存中的数据是非常快的,使用指针(或引用)提高内存数据(指根本数据)的复用性,既能降低内存的消耗,也能提高数据显示及运用的速度(或者性能)。
举例的话把这里的数据改成图片就好。
1、本地图片(也就是硬盘中的图片),如何写入内存的。实际上通过各种语言中的一种方法。比如java中的流。
2、网络中图片数据,实际是先把图片先下载到本地,然后再通过方法1加载到内存。
3、如何提高内存数据的复用性。--建立一个hash表,把表中的图片的URL或名字,做为key(唯一的,实际就是实现一一对应),把实例的bitmap对象地址值(或引用值)作为value。当显示图片时可以先根据图片名到这个hash表中去找图片,(1)找到直接拿地址值显示;(2)找不到,去判断本地是否存在这张图片文件,(1)存在加载到内存,同时放入hash表中(2)不存在,向网络请求图片数据,把图片数据生成文件存储到本地,再把本地数据写入到内存,同时再把图片文件放到hash表中。
(二)地址值(或引用值)--实际就是一个数字
实际上除了基本类型以外,每个数据元素都可以看成由数据(也是数字)和地址值(或引用值)(也是数字)组成。这个地址值(或引用值)实际就是这个数据的一种标识。
二、线程
1、线程容易出错的原因是当开启线程以后,某个数据元素(由数据与地址值组成),以主线程与子线程为例,主线程与子线程都持有这个数据元素的地址值,也就是说它两随时都可能改变数据元素的值,而导致异常。比如a,b有持有同一个账户【1、即同一个数据的地址值】,对a来说,如果卡里大于10块钱,就去商店买饭,此时a发现卡里的钱大于10,就去睡了个觉【3、睡觉的意思是线程实际上是异步的,即Cpu可能先去执行了主线程,而子线程需要等待CPU执行】,打算一会去再去商店买饭;但是在a睡觉时,b把账户中钱全取光了【2、CPU在执行主线程】,后来a醒了,去商店买饭时,当时a就瞪眼了,发现账户没钱了。
2、Android实际listview、viewPager加载图片时出问题的原因,也是线程问题。
(一)内存的复用
CPU读写内存中的数据是非常快的,使用指针(或引用)提高内存数据(指根本数据)的复用性,既能降低内存的消耗,也能提高数据显示及运用的速度(或者性能)。
举例的话把这里的数据改成图片就好。
1、本地图片(也就是硬盘中的图片),如何写入内存的。实际上通过各种语言中的一种方法。比如java中的流。
2、网络中图片数据,实际是先把图片先下载到本地,然后再通过方法1加载到内存。
3、如何提高内存数据的复用性。--建立一个hash表,把表中的图片的URL或名字,做为key(唯一的,实际就是实现一一对应),把实例的bitmap对象地址值(或引用值)作为value。当显示图片时可以先根据图片名到这个hash表中去找图片,(1)找到直接拿地址值显示;(2)找不到,去判断本地是否存在这张图片文件,(1)存在加载到内存,同时放入hash表中(2)不存在,向网络请求图片数据,把图片数据生成文件存储到本地,再把本地数据写入到内存,同时再把图片文件放到hash表中。
(二)地址值(或引用值)--实际就是一个数字
实际上除了基本类型以外,每个数据元素都可以看成由数据(也是数字)和地址值(或引用值)(也是数字)组成。这个地址值(或引用值)实际就是这个数据的一种标识。
二、线程
1、线程容易出错的原因是当开启线程以后,某个数据元素(由数据与地址值组成),以主线程与子线程为例,主线程与子线程都持有这个数据元素的地址值,也就是说它两随时都可能改变数据元素的值,而导致异常。比如a,b有持有同一个账户【1、即同一个数据的地址值】,对a来说,如果卡里大于10块钱,就去商店买饭,此时a发现卡里的钱大于10,就去睡了个觉【3、睡觉的意思是线程实际上是异步的,即Cpu可能先去执行了主线程,而子线程需要等待CPU执行】,打算一会去再去商店买饭;但是在a睡觉时,b把账户中钱全取光了【2、CPU在执行主线程】,后来a醒了,去商店买饭时,当时a就瞪眼了,发现账户没钱了。
2、Android实际listview、viewPager加载图片时出问题的原因,也是线程问题。
相关文章推荐
- 中缀转后缀
- CSS HTML实现背景图片的填充
- UITableView介绍 之 网络图片数据加载
- LeetCode Strobogrammatic Number
- 大数据架构和模式(二)如何知道一个大数据解决方案是否适合您的组织
- LinuxMint17.3配置全局变量
- 第一期:搭建什么样的多用户平台?(未完)
- 第二期: 如何搭建 多用户的平台?(未完)
- 大数据架构和模式(三)理解大数据解决方案的架构层
- 如何避免编程中的BUG
- swift:CoreData简单入门(增加、查询、修改、删除)(详细讲解)
- ThreadLocal源码分析解密
- ubuntu 14.04 开机添加磁盘挂载
- bootstrap相关
- JavaScript-正则表达式总结
- 25该何去何从
- weblogic
- 微信js sdk 分享 失败 有时候好 有时候坏
- ssm框架整合笔记-1-基础框架搭建
- javascript中的BOM知识点总结