原创 spring中裝配bean的方式(四)
在Spring框架xml配置中共有6種自動裝配: byName:通過bean的名稱進行自動裝配,如果一個bean的 property 與另一bean 的name 相同,就進行自動裝配。 byType:通過參數的數據類型進行自動裝配。
原创 棧和堆內存溢出診斷(二)
棧內存溢出: 問題定位 1.cpu佔用過多 定位: 用top定位哪個進程對cpu佔用過高 ps H -eo pid,tid,%cpu | grep 進程id(定位是哪個線程引起的cpu)佔用過高 jstack進程id 可以根據線程id找到
原创 spring中bean的生命週期(三)
bean的生命週期主要是以下幾個階段 實例化 Instantiation 屬性賦值 Populate 初始化 Initialization 使用bean 銷燬 Destruction 有一個汽車工廠準備造一款新產品的車,這是個來了一個人(
原创 認識二進制字節碼文件內容(三)
二進制字節碼主要包含3個重要的信息: 類基本信息 常量池 類的方法定義(包含了虛擬機指令) 首先我們可以先編寫一個簡單的java文件 public class JvmDemo { public static void ma
原创 spring源碼構建(一)
源碼下載 直接進入官網,通過官網找源碼地址 選擇到對應的版本,下載到指定目錄後 打開目錄可以一個build.gradle文件,裏面有當前代碼需要構建的gradle版本 打開https://gradle.org/release
原创 synchronized理解
synchronized鎖定的是一個對象,不是代碼塊。 先看一個例子 public class Layout { public static void main(String[] args) { Object
原创 reentrantlock的使用
reentrantlock可以用來代替synchronized 使用syn鎖定的話如果遇到異常,jvm會自動釋放鎖,但是lock必須手動釋放鎖,因此經常在finally中進行鎖的釋放 class ReentrantLockDemo{
原创 java對象佔用內存
大家可能遇到過Object o = new Object(),在內存中佔用多少空間。 這裏首先要了解java內存對象的佈局:對象頭(Header)、實例數據(Instance Data)和對齊填充(Padding)。無論是32位還是64位
原创 位運算符
&:與運算,遇0則0。1&0 = 0 ,1&1 = 1 ,0&0 = 0 。 |:按位或運算,遇1則1。1|0=1 ,1|1=1 ,0|0 = 0 ~:按位取反。1變0,0變1 ^:異或運算,不需要進位加, 相同爲0,不同爲1
原创 單例模式5.1(序列化破壞單例)
之前見過可以通過反射來破壞單例,和如何防止被破壞。今天講一下序列化破壞單例。 新建類 SerializableSingletion,其實就是餓漢式單例,只是實現了Serializable接口 public class Seriali
原创 單例模式六(註冊式單例)
概念:每個實例都緩存到統一容器管理,通過唯一標識獲取對應的實例 。也可稱爲容器式單例 public class ContainerSingletion { private ContainerSingletion(){}
原创 單例模式五(枚舉式單例)
前面文章講到的單例都可以通過反射破壞,這裏就有枚舉式單例來解決 public enum EnumSinletion { SINGLETION ; public static EnumSinletion getSing
原创 單例模式一(餓漢式)
概念 整個系統中確保一個類只有一個對象實例 使用原因 方便管理 資源的合理利用 實現思路 構造函數私有化 靜態函數返回實例 確保對象實例有且只有一個 public class HungrySingleton {
原创 單例模式四(靜態內部類單例)
這裏有一種優雅的單例寫法,採用內部類來創建實例,跟懶漢式一樣,只有在調用的時候才進行創建實例 public class LazyStaticInnerSingletion { private LazyStaticInnerSi