原创 跟我一起學JVM(六)——類的加載機制

類的生命週期 加載-驗證-準備-解析-初始化-使用-卸載 類的初始化階段,虛擬機嚴格規定了有且只有五種情況必須立即對“類”進行初始化,而加載和連接過程已經完成 主動引用: (1)遇到new,getstatic,putstatic,

原创 跟我一起學JVM(四)——JVM調優總結與實例

Java虛擬機對於內存的管理和垃圾收集是虛擬機結構中非常重要的一環,對提升程序的性能和穩定性有着非常重要的作用 對於JVM的調優是沒有正確答案的,需要根據項目的實際情況來配置合適的JVM參數。 (一)儘量減少Full GC的發生

原创 跟我一起學JVM(二)——Java對象的幕後

今天的學習內容爲Java對象的創建,內存分配以及訪問。 我們都知道在Java程序中使用new關鍵字能夠爲我們創建一個對象實例,並且能按照我們的需要去進行一系列的對象初始化工作,但是很少有人願意探究這個對象構建背後的過程。本文第一部

原创 Java併發編程的藝術(四)——進程與線程

進程(process)是操作系統啓動的一個程序,是操作系統資源分配的最小單元,一個進程可以包含多個線程 線程(thread)是的CPU調度的最小單元 線程的狀態(6種): new:創造實例初始化,但未進行start()方法的調用

原创 Java併發編程的藝術(六)——線程池

我們爲什麼要使用線程池? 顧名思義,線程池就是一個存放了很多線程的“池”,就像糧倉一樣,每次我們需要使用線程的時候都可以先去“池子”裏看看有沒有空閒的線程,如果有直接拿出來用就可以了。 爲什麼要提前準備好這些線程並把他們存儲起來呢

原创 數據結構專題(四)—— 樹

樹在計算機中佔着舉足輕重的地位,目前計算機中的文件系統,程序開發中的XML與HTML等都是樹這一數據結構的運用。甚至包括英雄聯盟的匹配系統也採用了樹,這章內容重點討論樹結構,並使用Java對一些常見的面試問題做個總結。由於關於樹的問題衆多

原创 Spring源碼分析(一)——IOC容器的思考

Java後端開發有很多框架,最著名的就是Spring了。這個框架已經存在了快20年了,經過不斷的更新迭代,成爲了目前最火熱的後端開發框架,並且形成了一個龐大的社區,衍生出很多系統設計的思想以及實現。在享受Spring帶給我們開發便

原创 Java併發編程的藝術——線程池

我們爲什麼要使用線程池? 顧名思義,線程池就是一個存放了很多線程的“池”,就像糧倉一樣,每次我們需要使用線程的時候都可以先去“池子”裏看看有沒有空閒的線程,如果有直接拿出來用就可以了。 爲什麼要提前準備好這些線程並把他們存儲起來呢

原创 跟我一起學JVM(五)——類文件結構

本章節內容涉及到一部分的計算機組成與設計,彙編語言以及Java語言的內容。 1.無關性基石 因爲JVM只關注Class文件的解析運行,負責將Class文件轉化成機器碼與本機操作系統進行交互。 所以任何語言只要能將程序編譯成JVM接

原创 跟我一起學JVM(七)——類加載器

(一)類加載器 類加載器的作用: 將Class文件加載進JVM方法區,並在方法區中創建一java.lang.Class對象作爲外界訪問這個類的接口。 類加載器的種類: (1)啓動類加載器 加載JAVA_HOME/lib下的clas

原创 跟我一起學JVM(三)——垃圾收集,刻不容緩

​本節的內容是Java虛擬機的核心——垃圾收集算法與垃圾收集器。 現實生活中我們都要講究垃圾分類,垃圾收集。計算機的內存空間就像現實生活中的儲物室一樣,存放雜物的同時需要定期清理,畢竟空間有限。那Java虛擬機在內存垃圾處理上面用

原创 Java併發編程的藝術(三)————synchronized,volatile與final

本章節主要介紹多線程編程中用的比較多的三個關鍵詞,分別是 synchronized, volatile, final 在開始之前首先要明白JMM模型的內容,即每個線程都是有自己本地的內存,用來存儲變量和數據備份的。模型如下圖:

原创 跟我一起學JVM(一)——Java虛擬機的內存結構

Java編程語言的特性就是兼容各種平臺,這也是Java得到不斷髮展的重要因素之一。有沒有人想過爲什麼會兼容呢? 在一開始接觸Java的時候我們就需要安裝Java virtual machine(JVM)以及JDK,平臺兼容性的核心

原创 java併發編程的藝術(五)——五花八門的鎖

多線程編程的很多實現是依靠鎖完成的。 鎖在操作系統層面通過test and set 或者 compare and set等彙編指令實現的 Java通過一些native的compareAndSet方法(每次看到native就蠢蠢欲動

原创 Java併發編程的藝術(一)——Java併發的基礎知識

上學期學習了計算機組成,跟着老師用C++模擬了一下CPU的流水線以及緩存之後發現正因爲工程師對於性能與效率的極致追求才有了現在先進的各式計算機設備。最近看了java虛擬機的書後也發現了虛擬機優化這塊用到了很多並行架構,比如G1,C