原创 Java 併發編程基礎知識

CPU 核心數和線程數的關係 目前的 CPU 有雙核,四核,八核,一般情況下,它和線程數是1:1的對應關係,也就是四核 CPU 一般就能並行執行 4 個線程。但 Intel 引入超線程技術後,使核心數與線程數形成1:2的關係,

原创 Java類加載器-動態加載外部dex

Android 類加載 Android 只能加載識別 dex 文件,因此需要將 .java 文件編譯 .class 文件,然後將 .class 優化爲 .dex 文件。 過程:.java -> .class -> .dex 下面來

原创 Java 虛擬機–內存模型

一、JVM 內存模型 本節來分析 Java 對象如何進行分配和回收。 JVM 運行時數據區主要由線程私有區域和線程共享區域組成。 線程私有區域: 虛擬機棧 本地方法棧 程序計數器 2.線程共享區域: 堆 方法區 下面繪

原创 Java 併發編程—CAS 機制

CAS 機制 什麼 CAS ? 在 Java 中,鎖分爲兩類,一種是悲觀鎖 Synchronized ,一種是樂觀鎖 CAS 機制。 CAS 機制是 Compare And Swap 的縮寫,比較替換的操作。是用於在多線程下提供

原创 「性能優化1.0」啓動分類及啓動時間的測量

「性能優化1.0」啓動分類及啓動時間的測量 一、爲什麼要做啓動優化? 應用的第一次啓動是用戶的第一體驗,如果啓動時間過長,那麼就會造成用戶的流失。在互聯網中有一個8s法則,百科的解釋式這樣的: 8秒原則是互聯網的一個著名的原則,用

原创 「性能優化1.1」計算方法的執行時間

「性能優化1.0」啓動分類及啓動時間的測量 「性能優化1.1」計算方法的執行時間 一、計算方法的執行時間 我們在前面的幾篇博客中分析瞭如何獲取應用的啓動時間,我們也知道啓動過程中我們能優化的方向就是 Application 和 A

原创 Java 併發編程—線程間的共享和協作(一)

線程間的共享和協作 線程間的共享 JVM 會爲每一個線程獨立分配虛擬機棧空間,本地方法棧空間以及程序計數器,而對於共享內存中的變量,是對每一個線程而言是共享的,因此多線程併發訪問共享內存中的變量時就會出現線程安全問題。具體可以參

原创 「性能優化1.2」異步優化

「性能優化1.0」啓動分類及啓動時間的測量 「性能優化1.1」計算方法的執行時間 「性能優化1.2」異步優化 一、異步優化 在上一小節中,我通過獲取應用的啓動時間和每一個方法執行之間之後,我們發現,如果在 Application

原创 「性能優化1.3」延遲加載方案

「性能優化1.0」啓動分類及啓動時間的測量 「性能優化1.1」計算方法的執行時間 「性能優化1.2」異步優化 「性能優化1.3」延遲加載方案 一、延時加載 1.1、爲什麼要延遲加載? 我們在 MainActivity 中優先應該展

原创 Gradle-wrapper 的學習筆記

前言 Gradle Wrapper 這個東西其實困擾了我很久,對這個東西一直沒搞懂,只知道使用 gradlew 這個命令就可以實現 gradle 的功能,但是實際爲什麼要這樣去操作呢?我還是一知半解的,今天花了點時間大概弄明白了爲

原创 Java 數據結構—阻塞隊列學習筆記

文章目錄特點阻塞你是怎麼理解的呢?簡單理解如下如何實現阻塞的呢?阻塞隊列主要有三種實現類BlockingQueue 基礎 APISynchrousBlockingQueueArrayBlokingQueue阻塞隊列在線程池的應用e

原创 序列化機制——Serializable工作原理

序列化與反序列化的概念 從廣義上講,數據序列化就是將數據結構或者是對象轉換成我們可以存儲或者傳輸的數據格式的一個過程,在序列化的過程中,數據結構或者對象將其狀態信息寫入到臨時或者持久性的存儲區中,而在對應的反序列化過程中,則可以說

原创 lancet 庫的工作原理

Lancet lancet 是一個輕量級Android AOP框架。 dependencies{ classpath 'me.ele:lancet-plugin:1.0.4' } apply plugin: 'me.ele.

原创 Android 虛擬機—Dalvik&ART

Dalvik 虛擬機與ART 虛擬機 Dalvik是什麼? Dalvik 是實現了 JVM 規範的虛擬機,內部默認使用的 CMS 垃圾回收器。但是與 JVM 不一樣的是 JMM 運行的 .class 字節碼,而 Dalvik 運行的

原创 「性能優化4.0」運行期間檢測不合理的圖片

文章目錄Bitmap 內存模型如何計算 bitmap 佔用內存檢測不合理圖片通用方式Hook 方式引入epic框架使用 epic 來檢測不合理圖片總結參考 Bitmap 內存模型 在 API10 之前,Bitmap 對象本身存在