《Effective java》讀書筆記-(三)
java強大之處可以幫助我們管理記憶體,並不是意味著,程式猿可以放棄記憶體的管理,同樣需要我們手動管理記憶體。不然的話,出現記憶體洩漏,十分影響效能。
什麼事記憶體洩漏呢?簡單點說,就是一個失去引用的物件,沒有及時回收其記憶體,以致該物件永遠不會回收,也許你覺得出現這樣的錯誤,無關緊要,可是你要想到,你在此處出現了這樣的失誤,可能在其他地方也會忽略,需要及時的清理過期引用。
解決的方式,一種當然是及時釋放記憶體。比如從棧中pop一個物件,就立即將該物件的記憶體清除,再返回棧頂物件。另一種方式是使該物件結束於生命週期。此種方式在android中很常見,比如當前activity中的context物件。
造成記憶體洩漏,還來源於快取,物件存放於快取中,容易遺忘,可能長時間不使用,仍存在快取中。可以啟動一條後臺執行緒來完成清除快取,也可以在新增新條目的時候清理舊的快取。
另外記憶體洩漏常見來源是監聽器和其他回撥。某個api註冊了,沒有顯示的取消註冊,久而久之,就會積聚。解決方式是使用弱引用,當記憶體無論充足與否時候,會回收記憶體。
相關推薦
《Effective java》讀書筆記-(三)
java強大之處可以幫助我們管理記憶體,並不是意味著,程式猿可以放棄記憶體的管理,同樣需要我們手動管理記憶體。不然的話,出現記憶體洩漏,十分影響效能。 什麼事記憶體洩漏呢?簡單點說,就是一個失去引用的物件,沒有及時回收其記憶體,以致該物件永遠不會回收,也許你覺
【Effective Java讀書筆記】創建和銷毀對象(一):考慮使用靜態工廠方法代替構造器
返回對象 boolean 簡化 將不 其他 種類型 bigint color pre 類可以提供一個靜態方法,返回類的一個靜態實例,如Boolean包裝類的一個獲取實例的靜態方法 1 public static Boolean valueOf(boolean b) { 2
讀書筆記《深入理解Java虛擬機器》 (三)物件已死?與記憶體分配策略
物件是否可回收 引用計數演算法 給物件新增一個引用計數器,每當有一個地方引用它時,計數器值就加1;當引用失效時就減1;當等於0時就認為物件不可能再被使用。問題:當兩個物件相互引用時,就無法回收了。 可達性分析演算法 通過一系列的稱為“GC Roots”的物件作為起
Effective Java 讀書筆記(一):建立和銷燬物件
1 構造器 => 靜態工廠方法 (1)優勢 靜態工廠方法有名字 靜態工廠方法不必在每次被呼叫時都產生一個新的物件 靜態工廠方法能返回原返回型別的任意子型別的物件 靜態工廠方法根據呼叫時傳入的不同引數而返回不同類的物件 靜態工廠方法返回物件的類不需要存在(SPI架構) (2
Effective Java讀書筆記(第8章-通用程式設計)
第8章 通用程式設計 第45條:講區域性變數的作用域最小化 要使區域性變數的作用域最小化,最有力的方法就是在第一次使用它的地方宣告。 如果在迴圈終止之後不再需要迴圈變數的內容,for迴圈優先於while迴圈。 for迴圈比
Effective Java讀書筆記(第10章-併發)
第10章 併發 第66條:同步訪問共享的可變資料 第67條:避免過度同步 第68條:executor和task優先於執行緒 第69條:併發工具優先於wait和notify 第70條:執行緒安全性的文件化
Effective Java讀書筆記(第9章-異常)
第9章 異常 第57條:只針對異常的情況才使用異常 設計良好的API不應該強迫它的客戶端為了正常的控制流而使用異常。異常是為了在異常情況下使用而設計的,不要將它們用於普通的控制流,也不要編寫迫使它們這麼做的API。 String[] str
Effective Java讀書筆記(二)
通過私有構造器槍花不可例項化的能力 // Noninstantiable utility class public class UtilityClass { // Suppress default constructor for nonintant
Effective Java讀書筆記(五)
用enum代替int常量 // Enum type with data and behavior public enum Planet { MERCURY (3.302e+23, 2.439e6), VENUS (4.869e+24,
Effective Java讀書筆記(四)
介面優於抽象類 骨架實現:通過對匯出的每個重要介面都提供一個抽象的骨架實現類,把介面和抽象類的優點結合起來。 研究介面,並確定哪些方法是最為基本的,其他的方法可以根據它們來實現。這些方法將成為骨架實現類中的抽象方法。 為介面中的所有其他方法提供具體實現。
《Effective C++》讀書筆記:(一)讓自己習慣C++
條款01:四個次語言:C、Object-Oriented C++、Template C++(泛型和模板超程式設計)、STL 條款02:用inline、enum、const代替#define #define定義的巨集,複雜起來,就會很難理解。 (1)對於單純常量
effective java-讀書筆記-第三章 對於所有物件都通用的方法
第三章 對於所有物件都通用的方法 所有非final方法(equals、hashCode、toString、clone、finalize)都有明確的通用約定,因為它們被設計成是要被覆蓋的,如果不遵守,基於雜湊的集合(HashMap、HashSet、HashTable)可
Effective Java學習筆記一(靜態工廠方法、JavaBeans模式、builder模式)
靜態工廠方法代替構造器 對於類而言,為了讓客戶端獲取它自身的一個例項,最常用的辦法是提供一個公有的構造器。還有一種方法:公有的靜態工廠方法。它只是一個返回類例項的靜態方法,如下程式碼所示: public class Gender { pri
Effective Java讀書筆記 -- 第三章:對於所有物件都通用的方法
儘管Object是一個具體類,但是設計Object類主要是為了擴充套件。它的所有非final方法(equals、hashCode、toString、clone和finalize)都有明確的通用約定,因為它們就是被設計成要被覆蓋的。第八條:覆蓋equals時請遵守通用約定
java面向對象(三)理論
ont def 三種 類的繼承 設置 一定的 命名 類型 以及 面向對象的基本特性 封裝 封裝性就是盡可能的隱藏對象內部細節,對外形成一道邊界,只保留有限的接口和方法與外界進行交互。封裝的原則是使對象以外的部分不能隨意的訪問和操作對象的內部屬性,從而避免了外界對對象內部
java高級工程師(三)
基礎 自信心 分布式緩存 基於 nlog 知識點 個人理解 數據 有時 一、獨白 之前也面試別人,現在輪到自己找工作,怎麽說呢,每個面試官的看法不一樣,面試的方式就不一樣,比如我面試別人我喜歡問項目中他用到了那些,然後針對用到的技術去問一些問題,或者說對於某些場景
JAVA線程同步 (三)信號量
ole 給定 如何 package 分配 exec 大量 復制代碼 離開 一個信號量有且僅有3種操作,且它們全部是原子的:初始化、增加和減少 增加可以為一個進程解除阻塞; 減少可以讓一個進程進入阻塞。 信號量維護一個許可集,若有必要,會在獲得許可之前阻塞每一個線程:
使用Eclipse + Maven 構建Java Web 項目(三)
項目打包 img app ima jet col tty class con 使用Jetty Maven 插件和Tomcat Maven 插件 1. Jetty Maven 插件 pom配置如下 <build> <finalName>we
java並發基礎(三)
線程生命周期 over out 處理請求 生命 inter 方式 希望 stat 第6章開始是第二部分,講解結構化並發應用程序,大多數並發應用程序都是圍繞“任務執行”構造的,任務通常是一些抽象的且離散的工作單元。 一、線程池 大多數服務器應用程序都提供了一種自然的任務邊界:
Java多線程(三)SimpleDateFormat
spa bsp sdf java多線程 ext add println turn static 多線程報錯:java.lang.NumberFormatException: multiple points SimpleDateFormat是非線程安全的,在多線程情況下會有