-
JPA 多數(shù)據(jù)源實現(xiàn)
-
線程同步方法
-
有幾種線程池
-
CAS機制
CAS有3個操作數(shù),內(nèi)存值V,舊的預(yù)期值A(chǔ),要修改的新值B。當(dāng)且僅當(dāng)預(yù)期值A(chǔ)和內(nèi)存值V相同時,將內(nèi)存值V修改為B,否則什么都不做。
現(xiàn)代的CPU提供了特殊的指令,可以自動更新共享數(shù)據(jù),而且能夠檢測到其他線程的干擾,而 compareAndSet() 就用這些代替了鎖定。
CAS通過調(diào)用JNI的代碼實現(xiàn)的。JNI:Java Native Interface為JAVA本地調(diào)用,允許java調(diào)用其他語言。
而compareAndSwapInt就是借助C來調(diào)用CPU底層指令實現(xiàn)的。
下面從分析比較常用的CPU(intel x86)來解釋CAS的實現(xiàn)原理。
http://zl198751.iteye.com/blog/1848575
-
CAS 全稱
Compare and Swap(比較和交換)
-
垃圾回收機制
可達性算法 新生代每清除一次記1 新生代 達到15歲 移動到老年代
新生代 使用 復(fù)制算法
每次按內(nèi)存容量將內(nèi)存劃分為等大小的兩塊。每次只使用其中一塊,當(dāng)這一塊內(nèi)存滿后將尚存活的對象復(fù)制到另一塊上去,把已使用的內(nèi)存清掉。
每次只使用其中一塊,在垃圾回收時,將正在使用的內(nèi)存中的存活對象復(fù)制到未使用的內(nèi)存塊中,之后,清除正在使用的內(nèi)存塊中的所有對象,交換兩個內(nèi)存的角色,完成垃圾回收
復(fù)制算法原理 (新生代)
Survivor區(qū),一塊叫From,一塊叫To,對象存在Eden和From塊。當(dāng)進行GC時,Eden存活的對象全移到To塊,而From中,存活的對象按年齡值確定去向,當(dāng)達到一定值(年齡閾值,通過-XX:MaxTenuringThreshold可設(shè)置)的對象會移到年老代中,沒有達到值的復(fù)制到To區(qū),經(jīng)過GC后,Eden和From被清空。
即若只分一塊Survivor,在清除Survivor區(qū)已死亡的對象時,因為此刻的Survivor區(qū)還有存活的對象,清除要比分兩塊Survivor麻煩,兩塊的情況,回收時只需將存活的對象移走,剩下的對象直接清理即可。
另外,分成兩塊Survivor,F(xiàn)rom和To分工明確,邏輯理解和技術(shù)實現(xiàn)較簡單。
標(biāo)記整理算法(老年代)
標(biāo)記:它的第一個階段與標(biāo)記/清除算法是一模一樣的,均是遍歷GC Roots,然后將存活的對象標(biāo)記。
整理:移動所有存活的對象,且按照內(nèi)存地址次序依次排列,然后將末端內(nèi)存地址以后的內(nèi)存全部回收。因此,第二階段才稱為整理階段。
一般來說,大對象會被直接分配到老年代,所謂的大對象是指需要大量連續(xù)存儲空間的對象,最常見的一種大對象就是大數(shù)組,比如:
byte[] data = new byte[4*1024*1024]
這種一般會直接在老年代分配存儲空間。
- Java8開始使用G1 Java9正式G1 作為默認(rèn)的垃圾回收
- G1 原理就是 開始全局 使用 標(biāo)記整理算法 包括新生代和老年代
-
注冊中心保持高可用
Eureka
自我保護機制
心跳 可以設(shè)置1s 一次 剔除列表
Eureka Server在一定時間內(nèi)沒有接收到某個微服務(wù)實例的心跳,Eureka Server將會注銷該實例(默認(rèn)90秒)。但是當(dāng)網(wǎng)絡(luò)分區(qū)故障發(fā)生時,微服務(wù)與Eureka Server之間無法正常通信,以上行為可能變得非常危險了——因為微服務(wù)本身其實是健康的,此時本不應(yīng)該注銷這個微服務(wù)。
Eureka通過“自我保護模式”來解決這個問題——當(dāng)Eureka Server節(jié)點在短時間內(nèi)丟失過多客戶端時(可能發(fā)生了網(wǎng)絡(luò)分區(qū)故障),那么這個節(jié)點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務(wù)注冊表中的信息,不再刪除服務(wù)注冊表中的數(shù)據(jù)(也就是不會注銷任何微服務(wù))。當(dāng)網(wǎng)絡(luò)故障恢復(fù)后,該Eureka Server節(jié)點會自動退出自我保護模式。
綜上,自我保護模式是一種應(yīng)對網(wǎng)絡(luò)異常的安全保護措施。它的架構(gòu)哲學(xué)是寧可同時保留所有微服務(wù)(健康的微服務(wù)和不健康的微服務(wù)都會保留),也不盲目注銷任何健康的微服務(wù)。使用自我保護模式,可以讓Eureka集群更加的健壯、穩(wěn)定。
Consul
-
最近印象深刻的項目
-
Redis中的數(shù)據(jù)結(jié)構(gòu)有哪些
簡單動態(tài)字符串
鏈表
字典
跳躍表
整數(shù)集合
壓縮列表
對象
-
使用了zk 和redis 的什么
-
RPC框架比較
-
三個詞語評價自己
-
Java中幾種Map
-Hashtable(線程安全--廢棄)、LinkedHashMa(鏈表)、TreeMap(基于紅黑樹)、WeakHashMap、ConcurrentHashMap(線程安全)、HashMap(哈希表 非線程安全 -
怎么形容Stream 函數(shù)式編程