原创 線程的生命週期狀態圖,及相應概念。

一、線程的生命週期 線程狀態轉換圖: 1、新建狀態(New) 用new關鍵字和Thread類或其子類建立一個線程對象後,該線程對象就處於新生狀態。處於新生狀態的線程有自己的內存空間,通過調用start方法進入就緒狀態(runnable)

原创 高併發鎖事務重試機制(JPA高併發下的樂觀鎖異常)

樂觀鎖: model實體類加version字段   @JsonProperty("_version") @Column(name = "version", nullable = false) @Version

原创 Java虛擬機垃圾回收(二) 垃圾回收算法 標記-清除算法 複製算法 標記-整理算法 分代收集算法 火車算法

       在《Java虛擬機垃圾回收(一) 基礎》中瞭解到如何判斷對象是存活還是已經死亡? 介紹了垃圾回收基礎算法:引用計數算法、可達性分析算法,以及HotSpot虛擬機中實現對象可達性分析的一些問題。        下面先來了解Ja

原创 100億個整數如何找到中位數?內存足夠和內存不足兩個場景

100億個整數,內存足夠,如何找到中位數?內存不足,如何找到中位數? (1)當內存足夠時: 採用快排,找到第n大的數。 • 隨機選取一個數,將比它小的元素放在它左邊,比它大的元素放在右邊 • 如果它恰好在中位數的位置,那麼它就是中位數,直

原创 Java虛擬機垃圾回收(一) 基礎:回收哪些內存/對象 引用計數算法 可達性分析算法 finalize()方法 HotSpot實現分析

      在《Java內存區域 JVM運行時數據區》中瞭解到各數據區有些什麼特點、以及相關參數的調整,知道了:程序計數器、虛擬機棧、本地方法棧這3個區域是隨線程而生而滅的,內存分配和回收都具備確定性,而Java堆和方法區則不一樣,各線程

原创 @SneakyThrows

@SneakyThrows 大膽拋出已檢查的異常,以前沒有人拋出它們! Overview @SneakyThrows可以用來偷偷拋出已檢查的異常而不在方法的throws子句中實際聲明這一點。當然,應該謹慎使用這種有爭議的能力。由lombo

原创 四種元註解:@Retention @Target @Document @Inherited

java中元註解有四個: @Retention @Target @Document @Inherited;    @Retention:註解的保留位置                @Retention(RetentionPolicy.S

原创 Redis的數據淘汰策略有哪些

Redis 提供 6 種數據淘汰策略(即,內存淘汰策略) volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用 的數據淘汰 volatile-ttl:從已設置過期時間的數據集(s

原创 內存屏障

內存屏障(Memory barrier) 爲什麼會有內存屏障 每個CPU都會有自己的緩存(有的甚至L1,L2,L3),緩存的目的就是爲了提高性能,避免每次都要向內存取。但是這樣的弊端也很明顯:不能實時的和內存發生信息交換,分在不同CPU執

原创 CMS垃圾收集器與G1收集器

1、CMS收集器   CMS收集器是一種以獲取最短回收停頓時間爲目標的收集器。基於“標記-清除”算法實現,它的運作過程如下: 1)初始標記 2)併發標記 3)重新標記 4)併發清除   初始標記、從新標記這兩個步驟仍然需要“stop th

原创 Java虛擬機垃圾回收(三) 7種垃圾收集器:主要特點 應用場景 設置參數 基本運行原理

Java虛擬機垃圾回收(三) 7種垃圾收集器  主要特點 應用場景 設置參數 基本運行原理          在《Java虛擬機垃圾回收(一) 基礎》中瞭解到如何判斷對象是存活還是已經死亡?在《Java虛擬機垃圾回收(二) 垃圾回收算法》

原创 深入理解Java HashMap

1. 概述 從本文你可以學習到: 什麼時候會使用HashMap?他有什麼特點? 你知道HashMap的工作原理嗎? 你知道get和put的原理嗎?equals()和hashCode()的都有什麼作用? 你知道hash的實現嗎?爲什麼要這

原创 java中的4種引用:強引用、軟引用、弱引用和虛引用

我們知道java語言提供了4種引用類型:強引用、軟引用(SoftReference)、弱引用(WeakReference)和幽靈引用(PhantomReference),與引用密切相關的,還有一個引用隊列ReferenceQueue。引用

原创 二維矩陣順時針旋轉90度

今天仍然來分析一個與數組操作相關的算法,是關於二維數組旋轉問題的。 問題描述 原文 You are given an n × n 2D matrix representing an image.  Rotate the image by

原创 Java8開始ConcurrentHashMap,爲什麼捨棄分段鎖

概述 我們知道, 在 Java 5 之後,JDK 引入了 java.util.concurrent 併發包 ,其中最常用的就是 ConcurrentHashMap 了, 它的原理是引用了內部的 Segment ( ReentrantLoc