原创 25. java虛擬機總結-垃圾回收器 (八)

CMS 垃圾回收器 Minor GC:發生在年輕代的 GC。 Major GC:發生在老年代的 GC。 Full GC:全堆垃圾回收。比如 Metaspace 區引起年輕代和老年代的回收。 CMS 的全稱是 Mostly Concur

原创 24. java虛擬機總結-垃圾回收器 (七)

關於 JVM 垃圾回收機制面試中主要涉及這三個考題: JVM 中有哪些垃圾回收算法?它們各自有什麼優劣? CMS 垃圾回收器是怎麼工作的?有哪些階段? 服務卡頓的元兇到底是誰? JVM 是有專門的線程在做這件事

原创 16.多線程總結(三)-併發工具類-CountdownLatch的使用及源碼探祕

CountDownLatch是併發編程中使用比較多的一個併發工具類,通過它我們可以實現一些複雜的業務,比如某一個任務被拆分成多個子任務,而最終等所有子任務完成之後再經過一個單獨的線程將所有子任務的結果進行彙總,這就是一個線程等待所有線程執行

原创 22. java虛擬機總結-從棧幀看字節碼 (五)

怎麼查看字節碼文件? 字節碼文件長什麼樣子? 對象初始化之後,具體的字節碼又是怎麼執行的? 查看字節碼的工具 javap javap 是 JDK 自帶的反解析工具。它的作用是將 .class 字節碼文件解析成可讀的文件格式 // -v 參數

原创 aar依賴方式記錄

近期在開發公司的廣告sdk,最終的目標就是打包成aar提供給公司內部各項目組使用,方便集成公司廣告功能。藉此機會總結一下aar依賴方式 1.項目依賴單一aar 這種依賴的方式很簡單 a.首先將我們打包好的aar放在項目的libs文件夾下 b

原创 21. java虛擬機總結-類的加載機制(四)

類的加載過程 大多數情況下,類會按照圖中給出的順序進行加載 加載 從jar包或war包找到並加載.class文件的二進制數據到Java的方法區 驗證 驗證在類的加載過程中佔了很大一部分,主要是爲了防止惡意攻擊,因爲並非所有的.class都

原创 17.多線程總結(四)-併發工具類-CyclicBarrier(柵欄)的使用及源碼探祕

CyclicBarrier同樣也是併發編程中使用很重要的一個併發工具類,它和CountdownLatch有相似的地方,但是又有不同。CyclicBarrier允許一組線程相互等待達到一個共同的點位,然後繼續執行。舉個例子,在100米跑比賽中

原创 18. java虛擬機總結(二)

JVM 就是Java虛擬機(Java Runtime Machine) JVM 和操作系統的關係 Java 程序使用 javac 編譯成 .class 文件之後,還需要使用 Java 命令去主動執行它,否則操作系統無法識別這些 .class

原创 26.DownloadManager下載框架實現-源碼

上一篇25.DownloadManager下載框架實現-簡介 五一小長假過去了,我的文章也要跟着更新了,順便提一下,這個五一收穫不小,餘生希望命運之神能眷顧 書歸正傳 本次主要是簡要介紹一下下載器的內部實現,並不複雜,所以只抓重點來說。 斷

原创 17.多線程總結(五)-併發工具類-Semaphore(信號量)的使用及源碼探祕

Semaphore是一個計數信號量,可以維護當前訪問自身的線程個數,並提供了同步機制。常用於限制可以訪問某些資源的線程數量,使用場景:接口限流 如下示例代碼,設置初始值爲5,表示同時只能最多5個線程訪問,我們在下邊開啓了8個線程,通過打印結

原创 40.FFmpeg命令總結

顯示信息 ffprobe -show_streams /Users/renzm/Desktop/output.mp4 縮放 ffmpeg -i b_5.mp4 -vf scale=480:800 output_800x480.mp4

原创 20.多線程總結(七)-ThreadPoolExecutor線程池探祕

1.如何創建一個線程池? //核心線程池大小 int corePoolSize = 10; //線程池最大容量 int maximunPoolSize = 20;

原创 25.DownloadManager下載框架實現-簡介

在本公司項目中,下載是廣告相關業務不可缺少的一個重要功能,然而由於下載部分的源碼沒有對其他部門公開,我又感覺公司的框架不好用(職業病,不分對錯),所以忙裏抽閒,花了大概一週時間,打造了一個自己的下載器,我希望我的下載器不只可以下載apk,也

原创 19. java虛擬機總結(三)

JVM 內存區域劃分 1.爲什麼進行內存區域劃分? Java自動內存管理機制是它和C++的區別所在。C++是手動內存管理,內存的釋放需要開發者自己處理,Java的自動內存管理機制使程序寫起來方便很多。但是爲了管理這些快速的內存申請釋放操作,

原创 20.多線程總結(六)-併發工具類-Exchanger的使用

Exchanger提供一個同步點,在這個同步點,兩個線程可以交換數據(exchange(V x)),所以有一點很明確,必須是兩個線程成對出現,只要有一個線程落單它就會一直陷入等待之中而無法自拔,望夫處,江悠悠。化爲石,不回頭。機器的情感遠超