原创 《深入理解java虛擬機》讀書筆記——運行時棧幀結構

棧幀是用於虛擬機進行方法調用和方法執行的數據結構,是虛擬機棧的棧元素。每一個方法從調用開始至執行完成的過程,都對應着一個棧幀在虛擬機棧裏面從入棧到出棧的過程。 每一個棧幀都包括了局部變量表、操作數棧、動態連接、方法返回地址和一些額外的附加

原创 多線程之AQS原理

AQS,全稱爲AbstractQueuedSynchronizer,粗粗的翻譯下就是抽象的隊列式的同步器。 java.util.concurrent包中很多同步類,都是基於AQS,像ReentrantLock、Semaphore等等。 小

原创 《深入理解java虛擬機》讀書筆記——類加載機制

一、類的生命週期: 加載、驗證、準備、初始化和卸載這5個階段的順序是確定的,但解析階段不一定,在某些情況下可以在初始化之後在開始,這是爲了支持java語言的運行時綁定(也稱動態綁定和晚期綁定)。關於運行時綁定可以查看這篇文章:http:

原创 多線程之循環柵欄CyclicBarrier及原理

讀前必看ReentrantLock——http://blog.csdn.net/qq_31957747/article/details/74929911 一、循環柵欄CyclicBarrier CyclicBarrier它允許一組線程互相

原创 多線程之倒計時器CountDownLatch及原理

讀前必看AQS原理——http://blog.csdn.net/qq_31957747/article/details/74910939 一、倒計時器CountDownLatch 這個工具通常用來控制線程等待,它可以讓某一個線程等待直

原创 《深入理解java虛擬機》讀書筆記——jvm內存區域

java虛擬機所管理的內存將會包括下列幾個運行時數據區域: 一、方法區: 1、用於存儲已被虛擬機加載的類信息、常量、靜態變量和即時編譯器編譯後的代碼等數據。 2、垃圾收集在這個區域較少出現,主要是針對常量池的回收和類型的卸載,當方法區

原创 多線程之信號量Semaphore及原理

讀前必看AQS原理——http://blog.csdn.net/qq_31957747/article/details/74910939 一、信號量(Semaphore) 重入鎖ReentrantLock是獨佔模式,一次都只允許一個線程

原创 java枚舉類型enum的使用

有的人說,不推薦使用枚舉。有的人說,枚舉很好用。究竟怎麼使用,如何使用,仁者見仁智者見智。總之,先學會再說~ 爲什麼要引入枚舉類 一個小案例 你寫了一個小程序,不過好久不用了,突然有一天,你想使用一下它。程序要想正確運行,

原创 mysql存儲引擎InnoDB和MyISAM的區別

InnoDB和MyISAM是很多人在使用MySQL時最常用的兩個表類型,這兩個表類型各有優劣,5.7之後就不一樣了 1、事務和外鍵 InnoDB具有事務,支持4個事務隔離級別,回滾,崩潰修復能力和多版本併發的事務安全,包括ACID。如果應

原创 《深入理解java虛擬機》讀書筆記——OOM發生的原因及解決方案

除了程序計數器外,虛擬機內存的其他幾個運行時區域都有發生OOM的可能,如果能夠區分根據報錯區分出是哪些區域報出來的異常,會更便於定位問題,解決問題。 一、java堆溢出 java.lang.OutOfMemoryError:java he

原创 idea下載多個插件項目啓動不了解決方案

今天下載mybatis plugin插件的時候 有好多個版本的plugin,然後呢,看第二個比較熱門,就下載了第二個,然後重啓idea發現這個插件貌似得花錢,那算了吧,咱用第一個免費的吧,就又下載了第一個,然後重啓idea。然後。。。就

原创 多線程之線程局部變量ThreadLocal及原理

一、線程局部變量ThreadLocal ThreadLocal爲變量在每個線程中都創建了一個副本,那麼每個線程可以訪問自己內部的副本變量。既然是隻有當前線程可以訪問的數據,自然是線程安全的。 主要方法: initialValue()方