原创 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