原创 《RabbitMQ實戰》4.解決Rabbit相關問題:編碼與模式

一、解耦 接收訂單與處理訂單解耦 很大程度的提高了接單的吞吐量,並且也很容易進行處理能力的擴展。 訂單系統與訂單處理也不用關心對方使用的啥語言,降低對接成本。 二、發後即忘 1)批處理:異步化批處理任務。 2)告警通知:可以利用

原创 《深入理解JAVA虛擬機》7.虛擬機類加載機制

一、類加載的時機   類的生命週期,如下 何時需要進行類加載: 遇到new、getstatic、putstatic、invokestatic字節碼指令。 使用java.lang.reflect包方法對類反射調用。 初始化一個類

原创 《深入理解JAVA虛擬機》12.Java內存模型與線程

一、硬件的效率與一致性         處理器、高速緩存、主內存間的交互關係,如下圖   二、Java內存模型   1)主內存與工作內存 主內存:所有的變量都存儲在主內存。 工作內存:每個前程都有自己的工作內存,保存了被該線程使用

原创 《深入理解JAVA虛擬機》13.線程安全與鎖優化

一、線程安全   代碼本身封裝了所有必要的正確性保證手段,令調用這個無需關心多線程問題,更無需自己採取任何措施來保證多線程的正確調用。 1)線程安全的實現方法 互斥同步:synchronize、ReentrantLock。 非阻塞同

原创 《深入理解JAVA虛擬機》3.垃圾收集器與內存分配策略

哪些內存需要回收? 什麼時候回收? 如何回收?   一、對象已死 1.引用計數算法         爲對象添加一個引用計數器,一個地方引用,計數器加1,引用失效則減1,當計數器爲0是,該對象將不再使用。該算法存在孤島問題(循環

原创 《深入理解JAVA虛擬機》2.Java內存區域與內存溢出問題

一、運行時數據區域 程序計數器:當前線程所執行的字節碼的行號。 Java虛擬機棧:每個方法在執行的時候都會創建一個棧幀,存儲局部變量表。操作數棧、動態鏈接、方法出口。 本地方法棧:爲虛擬機使用到的Native方法服務。 Java堆:所有線

原创 《深入理解JAVA虛擬機》9.類加載及執行子系統的案例與實踐

一、Tomcat:正統的類加載器架構 從圖中的委派關係中可以看出: CommonClassLoader能加載的類都可以被Catalina ClassLoader和SharedClassLoader使用,從而實現了公有類庫的共用。

原创 《Java併發編程實戰》1.基礎知識

二、什麼是線程安全         當多個線程訪問某個類時,不管運行時採用的何種調度方式或者這些線程如何交替執行,並且再主調度代碼也不需要任何額外的同步或者協同,這個類能表現出正確的行爲,那麼這個類就是線程安全的。   三、對象共享 線程

原创 《Java併發編程實戰》2.結構化併發應用程序

六、任務執行         Executor框架         1)線程池 newSingleThreadExecutor 一個線程 newFixedThreadPool 固定大小線程池 newCachedThreadPoo

原创 《Java併發編程實戰》3.活躍性、性能與測試

十、避免活躍性危險 1)死鎖     死鎖的產生:A線程持有鎖1,嘗試獲取鎖2,同時B線程持有鎖2,嘗試獲取鎖1。     避免死鎖:使用支持定時的鎖;控制鎖順序;多個鎖轉爲1個鎖。jstack -l pid可查看死鎖。 2)飢餓    

原创 《Java併發編程實戰》4.高級主題

十三、顯式鎖 1)Lock與ReentrantLock void lock(); 獲取鎖,未獲取到則阻塞。 void lockInterruptibly() throws InterruptedException; 獲取鎖,未獲取到

原创 Java虛擬機學習-(4)類加載機制

類的加載過程   加載:.class加載到方法區,並生成該類的Class對象。 驗證:規範驗證,文件格式驗證、元數據驗證(類驗證)、字節碼驗證(字節碼指令、操作數驗證)、符號引用驗證(找類、方法、修飾符等)。 準備:類變量分配內存。 解

原创 JAVA設計模式-抽象工廠模式

一、概念 先有一個抽象工廠,然後去生成其他具體工廠,然後用其他具體工廠創建對象。 客戶類和工廠類分開。消費者任何時候需要某套產品集合時,只需向抽象工廠請求即可。抽象工廠會再向具體的工廠生產出符合產品集規格的產品。(來源於百度百科) 二

原创 JAVA設計模式-建造者模式

一、概念 通過一個建造者(Builder)去構造對象 二、代碼 例子:使用建造者模式創建一個臺式機箱及一個macbook 電腦類-Computer public class Computer { /** * 電腦

原创 ReentrantLock學習(五)Condition中await&signal

一、簡介 ReentrantLock 中ConditionObject內部類,實現了Condition接口,內部維護了一個單向鏈表(firstWaiter、lastWaiter),而Node中的nextWaiter正是用於該單鏈表