原创 一起理解垃圾回收算法

概述 java內存運行時區域的各個部分,其中程序計數器、虛擬機棧、本地方法棧3個區域隨線程而生,隨線程而滅;棧中的棧幀隨着方法的進入和退出而有條不紊地執行這出棧和入棧操作。每一個棧幀中分配多少內存基本上是在類結構確定下來時就已知的

原创 一文帶你看懂jvm虛擬機內存管理

運行時數據區 程序計數器(線程私有) 一塊較小的內存空間,可以看作是當前線程所執行的字節碼的行號指示器。如果線程正在執行的是一個java方法,記錄的是正在執行的虛擬機字節碼指令的地址;如果執行的是native方法,這個計數器值

原创 程序編譯與代碼優化—編譯期優化

3類編譯過程中比較有代表性的編譯器 前端編譯器:Sun的Javac、Eclipse JDT中的增量式編譯器(ECJ) JIT編譯器:HotSpot VM的C1、C2編譯器 AOT編譯器:GUN Compiler for the

原创 jvm內存分配與回收策略乾貨

概述 java技術體系中所提倡的自動內存管理最終可以歸結爲自動化地解決兩個問題:給對象分配內存以及回收分配給對象的內存。 對象的內存分配,往大方向將,就是堆上分配(但也可能經過JIT編譯後被拆散爲標量類型並間接地棧上分配),對象主

原创 線程安全與鎖優化,全是乾貨!

線程安全 當多個線程訪問一個對象時,如果不用考慮這些線程在運行時環境下的調度和交替執行,也不需要進行額外的同步,或者在調用方進行其他任何的協調操作,調用這個對象的行爲都可以獲得正確的結果,那這個對象就是線程安全的。 java語言中

原创 CSS 那些坑我幫你都踩了,快來看看吧!

層疊次序 一般而言,所有的樣式會根據下面的規則層疊於一個新的虛擬樣式表中,其中數字 4 擁有最高的優先權。 瀏覽器缺省設置 外部樣式表 內部樣式表(位於 標籤內部) 內聯樣式(在 HTML 元素內部) 值得不同寫法和單位 除

原创 深入理解jdk動態代理—手動實現一個動態代理

最近在看《Spring5核心原理》,看到代理模式這一節,有一個手動實現動態代理,想要運行一下,理一下整個過程,但是網上找不到源碼,於是自己手動敲了一個,在這裏做個分享供大家學習和理解動態代理: package porxy; pub

原创 垃圾收集器知識點彙總

概述 如果說收集算法是內存回收的方法論,那麼垃圾收集器就是內存回收的具體實現。java虛擬機規範中對垃圾收集器應該如何實現並沒有任何規定,因此不同的廠商、不同版本的虛擬機所提供的垃圾收集器可能會有很大差別,並且一般都會提供參數供用

原创 虛擬機類加載機制乾貨知識點

概述 虛擬機把描述類的數據從Class文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,這就是虛擬機的類加載機制。 與那些在編譯時需要進行連接工作的語言不同,在Java語言裏面,類型的

原创 類加載器知識點梳理

類加載器 定義 虛擬機設計團隊把類加載階段中的“通過一個類的全限定名來獲取描述此類的二進制字節流”這個動作放到java虛擬機外部去實現,以便讓應用程序自己決定如何去獲取所需要的類。實現這個動作的代碼模塊稱爲”類加載器“。 類加載器

原创 jvm字節碼執行引擎,都幫你整理好了

概述 執行引擎是java虛擬機最核心的組成部分之一。“虛擬機”是相對於“物理機”的概念,這兩種機器都有代碼執行能力,其區別是物理機的執行引擎是直接建立在處理器、硬件、指令集和操作系統層面上的,而虛擬機的執行引擎是由自己實現的,因此

原创 帶你讀懂Class類文件

Class文件 Class文件是一組以8位字節爲基礎單位的二進制流,各個數據項目嚴格按照順序緊湊地排列在Class文件之中,中間沒有添加任何分隔符,這使得整個Class文件中存儲的內容幾乎全部是程序運行的必要數據,沒有空隙存在。當

原创 程序編譯與代碼優化—運行期優化

即時編譯器 在部分的商用虛擬機(Sun HotSpot、IBM J9)中,java程序最初是通過解釋器(Interpreter)進行解釋執行的,當虛擬機發現某個方法或代碼塊的運行特別頻繁時,就會把這些代碼認定爲“熱點代碼”(hot

原创 深入理解java虛擬機知識點—java內存模型

文章目錄爲什麼要併發?硬件的效率與一致性java內存模型主內存與工作內存內存間交互操作volatile型變量的特殊規則保證此變量對所有線程的可見性禁止指令重排序優化對於long和double型變量的特殊規則非原子協定先行發生原則j