原创 google 下的AbstractIdleService

這個提供的service主要是負責一些服務器的啓動等。比如一些netty,redis等啓動關閉的可以放在裏面管理 介紹下AbstractIdleService的使用 public class Test extends

原创 guava cache 存儲的數據結構 --- 2

注: maxWeight 是緩存數超出設置的數量時就回收最近沒有使用的活使用次數少的. segment數組的初始化 : (先分爲幾個小段,get(key)時,根據key的hash定位到他是哪一個段內,提高查詢效率) 先計算

原创 guava cache 存儲的數據結構3 之 ValueReference -- 4

這個主要在於 CacheBuilder.setValueStrength(..), eg: CacheBuilder.newBuilder() .weakV

原创 java 數據結構

list List : 有序的,有重複的(主要是鏈表,插入的時候順序都是排好的,重複的也可以) ArrayList 1:爲什麼ArrayList中的size快? size class ArrayLis

原创 遊戲內的知識點

內部指令 : InnerMsgType 客戶端指令: 寫在MsgType 不需要再手動註冊 熱加載的 繼承 AbsHotResourceLoader 就 一般的就 繼承 AbsResourceLoader 配置表:

原创 netty 詳解

ServerBootstrap.bind(new InetSocketAddress(port)) 服務端綁定端口 NioEventLoopGroup bossGroup = new NioEventLoopGrou

原创 java的幾個關鍵字

java的幾個關鍵字 native 就是這個方法不實現,他是由C/C++語言來實現(java無法訪問操作系統底層,系統硬件等等),這時就需要native來擴展 這個被修飾的方法相當於接口,這裏就用了jni 具體就

原创 guava cache 代碼分析2 -- 6

2. Segment 緩存區 之前在LocalCache構造器中,已經提到了 1.根據concurrencyLevel確定緩存區的個數(segment數組的個數) 2. 根據初始化容量initialCap

原创 阻塞隊列BlockingQueue

這個是先進先出的隊列,且是阻塞的 1. 取出時。 size = 0,會阻塞,當插入數據到隊列中喚醒線程 2. 插入時。 size > maxSize,會阻塞,當取出數據時喚醒線程 ArrayBlocking

原创 線程池 ExecutorService

創建固定大小的線程 public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecut

原创 遊戲內消息處理

發送消息有4種渠道 1. io 2. bus 3. stage 4. public 前面已經講過了關於EasyManager的初始化。 public class EasyManager impl

原创 netty

如果只有1個服務器線程來處理所有的客戶端請求,在高併發的情況下,處理速度慢,這回導致大量的客戶端超時,超時後再進行重連,這會加重線程的負載。導致大量消息擠壓和超時。 一旦線程造成死循環,那麼回導致通信不可再用。 這裏就提到多線

原创 guava的一些幫助類

guava的一些幫助類 Preconditions這個可以用來簡單的判斷,null,表達式等等… 排序: Ordering.natural().sortedCopy(list))…從小到大自然的排序 這個只對基本類型排序

原创 dubbo 集羣容錯

在收到提供者執行的結果時,當結果處理失敗時,需要對其進行處理。 在Reference中,返回的Invoker是根據對應的容錯機制生成的Invoker <dubbo:reference id="testService" inter

原创 dubbo源碼分析11 -- 容錯cluster和負載均衡 (針對消費者)

cluster的基類:AbstractClusterInvoker /** 執行 1.獲取到集羣中對應的所有提供者url 2.獲取到負載均衡的方式 3.如果是異步的話,參數加上invocation id 4.