1. 程式人生 > >程式設計思想(管理記憶體和回收記憶體)

程式設計思想(管理記憶體和回收記憶體)

-- Java的JVM的記憶體可分為3個區:堆(heap)、棧(stack)和方法區(method)也叫靜態儲存區。
 堆區:(存放所有new出來的物件;)
1.儲存的全部是物件,每個物件都包含一個與之對應的class的資訊。(class的目的是得到操作指令) 
2.jvm只有一個堆區(heap)被所有執行緒共享,堆中不存放基本型別和物件引用,只存放物件本身

 棧區:(存放基本型別的變數資料和物件的應用,物件(new出來的物件)本身並不存在棧中,而是存放在堆中或者常
量池中(字串常量物件存放在常量池中))
1.每個執行緒包含一個棧區,棧中只儲存基礎資料型別的物件(比如int i=1中1就是基礎型別的物件)和自定義物件的
引用(不是物件)而真實物件都存放在堆區中 
2.每個棧中的資料(原始型別和物件引用)都是私有的,其他棧不能訪問。 
3.棧分為3個部分:基本型別變數區、執行環境上下文、操作指令區(存放操作指令)。

 常量池:存放基本型別常量和字串常量。
方法區:
1.又叫靜態區,跟堆一樣,被所有的執行緒共享。方法區包含所有的class和static變數。 
2.方法區中包含的都是在整個程式中永遠唯一的元素,如class,static變數名,不是常量(它在堆疊中)。

-- 程式設計思想
 物件複用 程式碼耦合性太強,解耦。複用程式碼,複用記憶體。
 ui優化,為什麼要優化,是因為卡頓了,渲染效能有問題。管理記憶體和回收記憶體。
 程式碼優化,為什麼要優化,因為比較耗時,方法或類比較多 佔用記憶體比較大
 
 複用,表面上是程式碼和ui複用,本質 或 更深層次的是記憶體的複用。軟體的所有都歸結為記憶體的操作 資料的互動。
記憶體回收與記憶體複用。時時刻刻都想著複用記憶體和釋放記憶體。複用view物件,類似recyclerview原理。
 面向介面程式設計,面向抽象程式設計與面向物件程式設計。介面或抽象是面向物件的精髓之一。複用記憶體 回收記憶體。

 堆中存放物件 棧中存放資料 Java?

 弱網下如何優化;弱網下做?重連,底層是斷包和丟包問題。
 android 什麼都要與記憶體打交道。為什麼複用view 及回收view,類似recyclerview機制。回收記憶體及複用記憶體。

 隨時都要想著怎麼回收記憶體和管理記憶體?
 物件持有了洩漏的物件,導致記憶體無法釋放。