您的位置:首页 > 其它

内存、线程一点想法

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加载图片时出问题的原因,也是线程问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: