內存、線程一點想法

一、內存

(一)內存的複用

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加載圖片時出問題的原因,也是線程問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章