原创 JVM內存區域劃分及其作用

一、運行時數據區1、程序計數器(寄存器)當前線程所執行的字節碼行號指示器字節碼解釋器工作依賴計數器控制完成通過執行線程行號記錄,讓線程輪流切換各條線程之間計數器互不影響線程私有,生命週期與線程相同,隨JVM啓動而生,JVM關閉而死線程執行

原创 JVM垃圾收集器與內存分配策略

判斷對象是否存活在進行GC之前,首先要確定的就是在java堆中那些對象已經“死去”那些對象還“活着”引用記數法(Referencecounting)瞭解即可,虛擬機並不是通過該算法來判斷對象是否存活。引用計數器的實現很簡單,對於一個對象A

原创 MyISAM和InnoDB存儲引擎的特點

Mysql區別於其他數據庫的一個重要特點是其插件式的表存儲引擎,注意,存儲引擎是基於表的,而不是基於數據庫。 MyISAM 特性   不支持事務:MyISAM存儲引擎不支持事務,所以對事務有要求的業務場景不能使用 表級鎖定:其鎖定機制是表

原创 虛擬機類加載機制

類從被加載到虛擬機內存中開始,到卸載出內存爲止,它的整個生命週期包括:加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(U

原创 一致性非鎖定讀和一致性鎖定讀

一致性的非鎖定讀 在默認配置下innodb的隔離級別是repeatable read,innodb的select操作使用的是一致性非鎖定讀 一致性的非鎖定行讀(consistent nonlocking read,簡稱CNR)是指Inno

原创 java線程的5種狀態及其轉換

Java中的線程的生命週期大體可分爲5種狀態。 1. 新建(NEW):新創建了一個線程對象。 2. 可運行(RUNNABLE):線程對象創建後,其他線程(比如main線程)調用了該對象的start()方法。該狀態的線程位於可運行線程池中,

原创 設計模式的六大原則

一、"開放-封閉"原則(OCP) Open-Closed Principle原則講的是:一個軟件實體應當對擴展開放,對修改關閉 二、 里氏代換原則(LSP) Liskov Substitution Principle(里氏代換原則):子類

原创 ThreadLocal

對於多線程資源共享的問題,同步機制採用了“以時間換空間”的方式,而ThreadLocal採用了“以空間換時間”的方式。前者僅提供一份變量,讓不同的線程排隊訪問,而後者爲每一個線程都提供了一份變量(實際上,這項工作需要程序員自己實現),因此

原创 線程池

什麼是線程池 合理使用線程池的好處: 線程池的實現原理 參考博客:https://blog.csdn.net/mine_song/article/details/70948223 ThreadPoolExecutor 大的實箭頭表示

原创 ABA問題的解決方法

CAS操作可能帶來ABA問題,因爲CAS操作需要在操作值的時候,檢查值有沒有發生變化,如果沒有發發生變化則更新。如果一個值原理是A,變成了B,又變成了A,那麼使用CAS進行檢查時會認爲它的值沒有變化,但是實際上卻變了。 ABA問題的解決辦

原创 Synchronized的實現原理

版本1: 每個對象有一個監視器鎖(monitor)。當monitor被佔用時就會處於鎖定狀態,線程執行monitorenter指令時嘗試獲取monitor的所有權,過程如下: 1、如果monitor的鎖計數器爲0,則該線程進入monito

原创 happens-before(先行發生原則)

JSR-133使用happens-before的概念來闡述操作之間內存的可見性,在JMM中如果一個操作的結果需要對另一個可見,那麼這兩個操作之間必須要存在happens-before規則 注意:兩個操作之間有happens-before關

原创 創建線程的三種方式

一、繼承Thread類創建線程類 (1)定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了線程要完成的任務。因此把run()方法稱爲執行體。 (2)創建Thread子類的實例,即創建了線程對象。 (3)調用線程

原创 鎖的類型

鎖對象用於管理對共享資源的併發訪問Innodb存儲引擎實現瞭如下2種標準的行級鎖: 共享鎖(S lock),允許事務讀取一行數據。 排它鎖(X lock),允許事務刪除或者更新一行數據。 當一個事務獲取了行r的共享鎖,那麼另外一個事務也可

原创 ReentrantLock 重入鎖(互斥鎖)

參考博客:https://blog.csdn.net/jiangjiajian2008/article/details/52226189 Synchronized是依賴於JVM實現的,而ReenTrantLock是JDK實現的 與sync