日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

一招MAX降低10倍,現在它是我的了

來源: 責編: 時間:2024-05-16 09:10:15 153觀看
導讀一.背景性能優化是一場永無止境的旅程。到家門店系統,作為到家核心基礎服務之一,門店C端接口有著調用量高,性能要求高的特點。C端服務經過演進,核心接口先查詢本地緩存,如果本地緩存沒有命中,再查詢Redis。本地緩存命中率99

一.背景

性能優化是一場永無止境的旅程。iDs28資訊網——每日最新資訊28at.com

到家門店系統,作為到家核心基礎服務之一,門店C端接口有著調用量高,性能要求高的特點。iDs28資訊網——每日最新資訊28at.com

C端服務經過演進,核心接口先查詢本地緩存,如果本地緩存沒有命中,再查詢Redis。本地緩存命中率99%,服務性能比較平穩。iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

隨著門店數據越來越多,本地緩存容量逐漸增大到3G左右。雖然對垃圾回收器和JVM參數都進行調整,由于本地緩存數據量越來越大,本地緩存數據對于應用GC的影響越來越明顯,YGC平均耗時100ms,特別是大促期間調用方接口毛刺感知也越來越明顯。iDs28資訊網——每日最新資訊28at.com

由于本地緩存在每臺機器上容量是固定的,即便是將機器擴容,對與GC毛刺也沒有明顯效果。iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

二.初識此物心已驚-OHC初識

本地緩存位于應用程序的內存中,讀取和寫入速度非常快,可以快速響應請求,無需額外的網絡通信,但是一般本地緩存存在JVM內,數據量過多會影響GC,造成GC頻率、耗時增加;如果用Redis的話有網絡通信的開銷。iDs28資訊網——每日最新資訊28at.com

框架iDs28資訊網——每日最新資訊28at.com

簡介iDs28資訊網——每日最新資訊28at.com

特點iDs28資訊網——每日最新資訊28at.com

堆外緩存iDs28資訊網——每日最新資訊28at.com

性能(一般情況)iDs28資訊網——每日最新資訊28at.com

Guava CacheiDs28資訊網——每日最新資訊28at.com

Guava Cache是Google的本地緩存庫,提供了基本的緩存功能。它簡單易用、輕量級,并支持基本的緩存操作。iDs28資訊網——每日最新資訊28at.com

·支持最大容量限制 iDs28資訊網——每日最新資訊28at.com

·支持兩種過期刪除策略(插入時間和訪問時間) iDs28資訊網——每日最新資訊28at.com

·支持簡單的統計功能iDs28資訊網——每日最新資訊28at.com

·基于LRU算法實現iDs28資訊網——每日最新資訊28at.com

不支持iDs28資訊網——每日最新資訊28at.com

性能中等iDs28資訊網——每日最新資訊28at.com

CaffeineiDs28資訊網——每日最新資訊28at.com

Caffeine是一個高性能的本地緩存庫,提供了豐富的功能和配置選項。它支持高并發性能、低延遲和一些高級功能,如緩存過期、異步刷新和緩存統計等。iDs28資訊網——每日最新資訊28at.com

·提供了豐富的功能和配置選項;高并發性能和低延遲;支持緩存過期、異步刷新和緩存統計等功能; iDs28資訊網——每日最新資訊28at.com

·基于java8實現的新一代緩存工具,緩存性能接近理論最優。iDs28資訊網——每日最新資訊28at.com

·可以看作是Guava Cache的增強版,功能上兩者類似,不同的是Caffeine采用了一種結合LRU、LFU優點的算法:W-TinyLFU,在性能上有明顯的優越性iDs28資訊網——每日最新資訊28at.com

不支持iDs28資訊網——每日最新資訊28at.com

性能出色iDs28資訊網——每日最新資訊28at.com

EhcacheiDs28資訊網——每日最新資訊28at.com

Encache是一個純Java的進程內緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。同Caffeine和Guava Cache相比,Encache的功能更加豐富,擴展性更強iDs28資訊網——每日最新資訊28at.com

·支持多種緩存淘汰算法,包括LRU、LFU和FIFO iDs28資訊網——每日最新資訊28at.com

·緩存支持堆內存儲、堆外存儲、磁盤存儲(支持持久化)三種 iDs28資訊網——每日最新資訊28at.com

·支持多種集群方案,解決數據共享問題iDs28資訊網——每日最新資訊28at.com

支持iDs28資訊網——每日最新資訊28at.com

性能一般iDs28資訊網——每日最新資訊28at.com

OHCiDs28資訊網——每日最新資訊28at.com

OHC(Off-Heap Cache)是一個高性能的堆外緩存庫,專為高并發和低延遲而設計。它使用堆外內存和自定義的數據結構來提供出色的性能iDs28資訊網——每日最新資訊28at.com

·針對高并發和低延遲進行了優化;使用自定義數據結構和無鎖并發控制;較低的GC開銷;iDs28資訊網——每日最新資訊28at.com

·在高并發和低延遲的緩存訪問場景下表現出色iDs28資訊網——每日最新資訊28at.com

支持iDs28資訊網——每日最新資訊28at.com

性能最佳iDs28資訊網——每日最新資訊28at.com

通過對本地緩存的調研,堆外緩存可以很好兼顧上面的問題。堆外緩存把數據放在JVM堆外的,緩存數據對GC影響較小,同時它是在機器內存中的,相對與Redis也沒有網絡開銷,最終選擇OHC。iDs28資訊網——每日最新資訊28at.com

三.習得技能心自安-OHC使用

talk is cheap, show me the code! OCH是騾子是馬我們遛一遛。iDs28資訊網——每日最新資訊28at.com

1.引入POM

OHC 存儲的是二進制數組,需要實現OHC序列化接口,將緩存數據與二進制數組之間序列化和反序列化。iDs28資訊網——每日最新資訊28at.com

這里使用的是Protostuff,當然也可以使用kryo、Hession等,通過壓測驗證選擇適合的序列化框架。iDs28資訊網——每日最新資訊28at.com

<!--OHC相關--><dependency>	<groupId>org.caffinitas.ohc</groupId>	<artifactId>ohc-core</artifactId>	<version>0.7.4</version></dependency><!--OHC 存儲的是二進制數組,所以需要實現OHC序列化接口,將緩存數據與二進制數組之間序列化和反序列化--><!--這里使用的是protostuff,當然也可以使用kryo、Hession等,通過壓測驗證選擇適合的--><dependency>	<groupId>io.protostuff</groupId>	<artifactId>protostuff-core</artifactId>	<version>1.6.0</version></dependency><dependency>	<groupId>io.protostuff</groupId>	<artifactId>protostuff-runtime</artifactId>	<version>1.6.0</version></dependency>

2.創建OHC緩存

OHC緩存創建iDs28資訊網——每日最新資訊28at.com

OHCache<String, XxxxInfo> basicStoreInfoCache = OHCacheBuilder.<String, XxxxInfo>newBuilder()                    .keySerializer(new OhcStringSerializer()) //key的序列化器                    .valueSerializer(new OhcProtostuffXxxxInfoSerializer()) //value的序列化器                    .segmentCount(512) // 分段數量 默認=2*CPU核數                    .hashTableSize(100000)// 哈希表大小 默認=8192                    .capacity(1024 * 1024 * 1024) //緩存容量 單位B 默認64MB                    .eviction(Eviction.LRU) // 淘汰策略 可選LRU/W_TINY_LFU/NONE                    .timeouts(false) //不使用過期時間,根據業務自己選擇                    .build();

自定義序列化器,這里key-String 序列化器,這里直接復用OCH源碼中測試用例的String序列化器;iDs28資訊網——每日最新資訊28at.com

value-自定義對象序列化器,這里用Protostuff實現,也可以自己選擇使用kryo、Hession等實現;iDs28資訊網——每日最新資訊28at.com

//key-String 序列化器,這里直接復用OCH源碼中測試用例的String序列化器public class OhcStringSerializer implements CacheSerializer<String> {    @Override    public int serializedSize(String value) {        return writeUTFLen(value);    }    @Override    public void serialize(String value, ByteBuffer buf) {        // 得到字符串對象UTF-8編碼的字節數組        byte[] bytes = value.getBytes(Charsets.UTF_8);        buf.put((byte) ((bytes.length >>> 8) & 0xFF));        buf.put((byte) ((bytes.length >>> 0) & 0xFF));        buf.put(bytes);    }    @Override    public String deserialize(ByteBuffer buf) {        int length = (((buf.get() & 0xff) << 8) + ((buf.get() & 0xff) << 0));        byte[] bytes = new byte[length];        buf.get(bytes);        return new String(bytes, Charsets.UTF_8);    }    static int writeUTFLen(String str) {        int strlen = str.length();        int utflen = 0;        int c;        for (int i = 0; i < strlen; i++) {            c = str.charAt(i);            if ((c >= 0x0001) && (c <= 0x007F)){                utflen++;}            else if (c > 0x07FF){                utflen += 3;}            else{                utflen += 2;            }        }        if (utflen > 65535) {            throw new RuntimeException("encoded string too long: " + utflen + " bytes");        }        return utflen + 2;    }}//value-自定義對象序列化器,這里用Protostuff實現,可以自己選擇使用kryo、Hession等實現public class OhcProtostuffXxxxInfoSerializer implements CacheSerializer<XxxxInfo> {    /**     * 將緩存數據序列化到 ByteBuffer 中,ByteBuffer是OHC管理的堆外內存區域的映射。     */    @Override    public void serialize(XxxxInfo t, ByteBuffer byteBuffer) {        byteBuffer.put(ProtostuffUtils.serialize(t));    }    /**     * 對堆外緩存的數據進行反序列化     */    @Override    public XxxxInfo deserialize(ByteBuffer byteBuffer) {        byte[] bytes = new byte[byteBuffer.remaining()];        byteBuffer.get(bytes);        return ProtostuffUtils.deserialize(bytes, XxxxInfo.class);    }    /**     * 計算字序列化后占用的空間     */    @Override    public int serializedSize(XxxxInfo t) {        return ProtostuffUtils.serialize(t).length;    }}

為了方便調用和序列化封裝為工具類,同時對代碼通過FastThreadLocal進行優化,提升性能。iDs28資訊網——每日最新資訊28at.com

public class ProtostuffUtils {    /**     * 避免每次序列化都重新申請Buffer空間,提升性能     */    private static final FastThreadLocal<LinkedBuffer> bufferPool = new FastThreadLocal<LinkedBuffer>() {        @Override        protected LinkedBuffer initialValue() throws Exception {            return LinkedBuffer.allocate(4 * 2 * LinkedBuffer.DEFAULT_BUFFER_SIZE);        }    };    /**     * 緩存Schema     */    private static Map<Class<?>, Schema<?>> schemaCache = new ConcurrentHashMap<>();    /**     * 序列化方法,把指定對象序列化成字節數組     */    @SuppressWarnings("unchecked")    public static <T> byte[] serialize(T obj) {        Class<T> clazz = (Class<T>) obj.getClass();        Schema<T> schema = getSchema(clazz);        byte[] data;        LinkedBuffer linkedBuffer = null;        try {            linkedBuffer = bufferPool.get();            data = ProtostuffIOUtil.toByteArray(obj, schema, linkedBuffer);        } finally {            if (Objects.nonNull(linkedBuffer)) {                linkedBuffer.clear();            }        }        return data;    }    /**     * 反序列化方法,將字節數組反序列化成指定Class類型     */    public static <T> T deserialize(byte[] data, Class<T> clazz) {        Schema<T> schema = getSchema(clazz);        T obj = schema.newMessage();        ProtostuffIOUtil.mergeFrom(data, obj, schema);        return obj;    }    @SuppressWarnings("unchecked")    private static <T> Schema<T> getSchema(Class<T> clazz) {        Schema<T> schema = (Schema<T>) schemaCache.get(clazz);        if (Objects.isNull(schema)) {            schema = RuntimeSchema.getSchema(clazz);            if (Objects.nonNull(schema)) {                schemaCache.put(clazz, schema);            }        }        return schema;    }}

3.壓測及參數調整

通過壓測并逐步調整OHC配置常見參數(segmentCount、hashTableSize、eviction,參數含義見附錄)iDs28資訊網——每日最新資訊28at.com

MAX對比降低10倍iDs28資訊網——每日最新資訊28at.com

GC時間對比降低10倍GC時間對比降低10倍iDs28資訊網——每日最新資訊28at.com

優化前iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

優化后iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

4.OHC緩存狀態監控

OHC緩存的命中次數、內存使用狀態等存儲在OHCacheStats中,可以通過OHCache.stats()獲取。iDs28資訊網——每日最新資訊28at.com

OHCacheStates信息:iDs28資訊網——每日最新資訊28at.com

hitCount:緩存命中次數,表示從緩存中成功獲取數據的次數。 missCount:緩存未命中次數,表示嘗試從緩存中獲取數據但未找到的次數。 evictionCount:緩存驅逐次數,表示因為緩存空間不足而從緩存中移除的數據項數量。 expireCount:緩存過期次數,表示因為緩存數據過期而從緩存中移除的數據項數量。 size:緩存當前存儲的數據項數量。 capacity:緩存的最大容量,表示緩存可以存儲的最大數據項數量。 free:緩存剩余空閑容量,表示緩存中未使用的可用空間。 rehashCount:重新哈希次數,表示進行哈希表重新分配的次數。 put(add/replace/fail):數據項添加/替換/失敗的次數。 removeCount:緩存移除次數,表示從緩存中移除數據項的次數。 segmentSizes(#/min/max/avg):段大小統計信息,包括段的數量、最小大小、最大大小和平均大小。 totalAllocated:已分配的總內存大小,表示為負數時表示未知。 lruCompactions:LRU 壓縮次數,表示進行 LRU 壓縮的次數。iDs28資訊網——每日最新資訊28at.com

通過定期采集OHCacheStates信息,來監控本地緩存數據、命中率=[命中次數 / (命中次數 + 未命中次數)]等,并添加相關報警。同時通過緩存狀態信息,來判斷過期策略、段數、容量等設置是否合理,命中率是否符合預期等。iDs28資訊網——每日最新資訊28at.com

四.剖析根源見真諦-OHC原理

堆外緩存框架(Off-Heap Cache)是將緩存數據存儲在 JVM 堆外的內存區域,而不是存儲在 JVM 堆中。在 OHC(Off-Heap Cache)中,數據也是存儲在堆外的內存區域。iDs28資訊網——每日最新資訊28at.com

具體來說,OHC 使用 DirectByteBuffer 來分配堆外內存,并將緩存數據存儲在這些 DirectByteBuffer 中。iDs28資訊網——每日最新資訊28at.com

DirectByteBuffer 在 JVM 堆外的內存區域中分配一塊連續的內存空間,緩存數據被存儲在這個內存區域中。這使得 OHC 在處理大量數據時具有更高的性能和效率,因為它可以避免 JVM 堆的垃圾回收和堆內存限制。iDs28資訊網——每日最新資訊28at.com

OHC 核心OHCache接口提供了兩種實現:iDs28資訊網——每日最新資訊28at.com

?OHCacheLinkedImpl: 實現為每個條目單獨分配堆外內存,最適合中型和大型條目。iDs28資訊網——每日最新資訊28at.com

?OHCacheChunkedImpl:實現為每個散列段作為一個整體分配堆外內存,并且適用于小條目。(實驗性的,不推薦,不做關注)iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

可以看到OHCacheLinkedImpl中包含多個段,每個段用OffHeapLinkedMap來表示。同時,OHCacheLinkedImpl將Java對象序列化成字節數組存儲在堆外,在該過程中需要使用用戶自定義的CacheSerializer。iDs28資訊網——每日最新資訊28at.com

OHCacheLinkedImpl的主要工作流程如下:iDs28資訊網——每日最新資訊28at.com

1.計算key的hash值,根據hash值計算段號,確定其所處的OffHeapLinkedMapiDs28資訊網——每日最新資訊28at.com

2.從OffHeapLinkedMap中獲取該鍵值對的堆外內存地址(指針)iDs28資訊網——每日最新資訊28at.com

3.對于get操作,從指針所指向的堆外內存讀取byte[],把byte[]反序列化成對象iDs28資訊網——每日最新資訊28at.com

4.對于put操作,把對象序列化成byte[],并寫入指針所指向的堆外內存iDs28資訊網——每日最新資訊28at.com

可以將OHC理解為一個key-value結果的map,只不過這個map數據存儲是指向堆外內存的內存指針。iDs28資訊網——每日最新資訊28at.com

指針在堆內,指針指向的緩存數據存儲在堆外。那么OHC最核心的其實就是對堆外內存的地址引用的put和get以及發生在其中內存空間的操作了。iDs28資訊網——每日最新資訊28at.com

對OHCacheLinkedImpl的put、get本地調試iDs28資訊網——每日最新資訊28at.com

1.put

put核心操作就是put核心操作就是iDs28資訊網——每日最新資訊28at.com

1.申請堆外內存iDs28資訊網——每日最新資訊28at.com

2.將申請地址存入map;iDs28資訊網——每日最新資訊28at.com

3.異常時釋放內存iDs28資訊網——每日最新資訊28at.com

第2步其實就是map數據更新、擴容等的一些實現這里不在關注,我們重點關注怎么申請和釋放內存的iDs28資訊網——每日最新資訊28at.com

1.申請內存

通過深入代碼發現是調用的IAllocator接口的JNANativeAllocator實現類,最后調用的是com.sun.jna.Native#malloc實現iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

2.釋放內存

通過上面可知釋放內存操作的代碼iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

3.get

iDs28資訊網——每日最新資訊28at.com

4.Q&A

在put操作時,上面看到IAllocator有兩個實現類,JNANativeAllocator和UnsafeAllocator兩個實現類,他們有什么區別?為什么使用JNANativeAllocator?iDs28資訊網——每日最新資訊28at.com

區別:UnsafeAllocator對內存操作使用的是Unsafe類iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

為什么使用JNANativeAllocator:Native比Unsafe性能更好,差3倍左右,OHC默認使用JNANativeAllocator;iDs28資訊網——每日最新資訊28at.com

在日常我們知道通過ByteBuffer#allocateDirect(int capacity)也可以直接申請堆外內存,通過ByteBuffer源碼可以看到內部使用的就是Unsafe類iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

可以看到,同時DirectByteBuffer內部會調用 Bits.reserveMemory(size, cap);iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

Bits.reserveMemory方法中,當內存不足時可能會觸發fullgc,多個申請內存的線程同時遇到這種情況時,對于服務來說是不能接受的,所以這也是OHC自己進行堆外內存管理的原因。iDs28資訊網——每日最新資訊28at.com

如果自己進行實現堆外緩存框架,要考慮上面這種情況。iDs28資訊網——每日最新資訊28at.com

五.總結

1.OHC使用建議

1.對于OHC的參數配置、序列化器的選擇,沒有固定的推薦。可以通過壓測逐步調整到最優。iDs28資訊網——每日最新資訊28at.com

2.由于OHC需要把key和value序列化成字節數組存儲到堆外,因此需要選擇合適的序列化工具。iDs28資訊網——每日最新資訊28at.com

3.在存儲每個鍵值對時,會調用CacheSerializer#serializedSize計算序列化后的內存空間占用,從而申請堆外內存。另外,在真正寫入堆外時,會調用CacheSerializer#serialize真正進行序列化。因此,務必在這兩個方法中使用相同的序列化方法,防止序列化的大小與計算出來的大小不一致,導致內存存不下或者多申請,浪費內存空間。iDs28資訊網——每日最新資訊28at.com

2.緩存優化建議

1.當本地緩存影響GC時,可以考慮使用OHC減少本地緩存對GC的影響;iDs28資訊網——每日最新資訊28at.com

2.區分熱點數據,對緩存數據進行多級拆分,如堆內->堆外->分布式緩存(Reids )等;iDs28資訊網——每日最新資訊28at.com

3.將較大緩存對象拆分或者按照業務維度將不同熱點數據緩存到不同介質中,減少單一存儲介質壓力;iDs28資訊網——每日最新資訊28at.com

4.減小緩存對象大小,如緩存JSON字符,可對字段名進行縮寫 ,減少存儲數據量,降低傳輸數據量,同時也能保證數據一定的私密性。iDs28資訊網——每日最新資訊28at.com

對象:{"paramID":1,"paramName":"John Doe"} 正常JSON字符串:{"paramID":1,"paramName":"John Doe"} 壓縮字段名JSON字符串:{"a":1,"b":"John Doe"}iDs28資訊網——每日最新資訊28at.com

Hold hold , One more thing....

在使用Guava時,存儲25w個緩存對象數據占用空間485MiDs28資訊網——每日最新資訊28at.com

使用OHCache時,儲存60w個緩存對象數據占用數據387MiDs28資訊網——每日最新資訊28at.com

為什么存儲空間差別那么多吶?iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com

Guava 存儲的對象是在堆內存中的,對象在 JVM 堆中存儲時,它們會占用一定的內存空間,并且會包含對象頭、實例數據和對齊填充等信息。對象的大小取決于其成員變量的類型和數量,以及可能存在的對齊需求。同時當對象被頻繁創建和銷毀時,可能會產生內存碎片。iDs28資訊網——每日最新資訊28at.com

而 OHC 它將對象存儲在 JVM 堆外的直接內存中。由于堆外內存不受 Java 堆內存大小限制,OHC 可以更有效地管理和利用內存。此外,OHC 底層存儲字節數組,存儲字節數組相對于直接存儲對象,可以減少對象的創建和銷毀,在一些場景下,直接操作字節數組可能比操作對象更高效,因為它避免了對象的額外開銷,如對象頭和引用,減少額外的開銷。同時將對象序列化為二進制數組存儲,內存更加緊湊,減少內存碎片的產生。iDs28資訊網——每日最新資訊28at.com

綜上所述,OHC 在存儲大量對象時能夠更有效地利用內存空間,相對于 Guava 在內存占用方面具有優勢。iDs28資訊網——每日最新資訊28at.com

另外一個原因,不同序列化框架性能不同,將對象序列化后的占用空間的大小也不同。iDs28資訊網——每日最新資訊28at.com

iDs28資訊網——每日最新資訊28at.com


參考及附錄

1.OHC常見參數

nameiDs28資訊網——每日最新資訊28at.com

默認值iDs28資訊網——每日最新資訊28at.com

描述iDs28資訊網——每日最新資訊28at.com

keySerializeriDs28資訊網——每日最新資訊28at.com

需要開發者實現iDs28資訊網——每日最新資訊28at.com

Key序列化實現iDs28資訊網——每日最新資訊28at.com

valueSerializeriDs28資訊網——每日最新資訊28at.com

需要開發者實現iDs28資訊網——每日最新資訊28at.com

Value序列化實現iDs28資訊網——每日最新資訊28at.com

capacityiDs28資訊網——每日最新資訊28at.com

64MBiDs28資訊網——每日最新資訊28at.com

緩存容量單位BiDs28資訊網——每日最新資訊28at.com

segmentCountiDs28資訊網——每日最新資訊28at.com

2倍CPU核心數iDs28資訊網——每日最新資訊28at.com

分段數量iDs28資訊網——每日最新資訊28at.com

hashTableSizeiDs28資訊網——每日最新資訊28at.com

8192iDs28資訊網——每日最新資訊28at.com

哈希表的大小iDs28資訊網——每日最新資訊28at.com

loadFactoriDs28資訊網——每日最新資訊28at.com

0.75iDs28資訊網——每日最新資訊28at.com

負載因子iDs28資訊網——每日最新資訊28at.com

maxEntrySizeiDs28資訊網——每日最新資訊28at.com

capacity/segmentCountiDs28資訊網——每日最新資訊28at.com

緩存項最大字節限制iDs28資訊網——每日最新資訊28at.com

throwOOMEiDs28資訊網——每日最新資訊28at.com

falseiDs28資訊網——每日最新資訊28at.com

內存不足是否拋出OOMiDs28資訊網——每日最新資訊28at.com

hashAlgorighmiDs28資訊網——每日最新資訊28at.com

MURMUR3iDs28資訊網——每日最新資訊28at.com

hash算法,可選性MURMUR3、 CRC32, CRC32C (Jdk9以上支持)iDs28資訊網——每日最新資訊28at.com

unlockediDs28資訊網——每日最新資訊28at.com

falseiDs28資訊網——每日最新資訊28at.com

讀寫數據是否加鎖,默認是加鎖iDs28資訊網——每日最新資訊28at.com

evictioniDs28資訊網——每日最新資訊28at.com

LRUiDs28資訊網——每日最新資訊28at.com

驅逐策略,可選項:LRU、W_TINY_LFU、NONEiDs28資訊網——每日最新資訊28at.com

frequencySketchSizeiDs28資訊網——每日最新資訊28at.com

hashTableSize數量iDs28資訊網——每日最新資訊28at.com

W_TINY_ LFU frequency sketch 的大小iDs28資訊網——每日最新資訊28at.com

edenSizeiDs28資訊網——每日最新資訊28at.com

0.2iDs28資訊網——每日最新資訊28at.com

W_TINY_LFU 驅逐策略下使用iDs28資訊網——每日最新資訊28at.com

2.JNI faster than Unsafe?iDs28資訊網——每日最新資訊28at.com

https://mail.openjdk.org/pipermail/hotspot-dev/2015-February/017089.htmliDs28資訊網——每日最新資訊28at.com

3.OHC源碼iDs28資訊網——每日最新資訊28at.com

https://github.com/snazy/ohciDs28資訊網——每日最新資訊28at.com

4.參考文檔iDs28資訊網——每日最新資訊28at.com

?序列化框架對比iDs28資訊網——每日最新資訊28at.com

?Java堆外緩存OHC在馬蜂窩推薦引擎的應用iDs28資訊網——每日最新資訊28at.com

?“堆外緩存”這玩意是真不錯,我要寫進簡歷了。iDs28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-88390-0.html一招MAX降低10倍,現在它是我的了

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Java EE更名Jakarta EE對程序開發影響,你知道嗎?

下一篇: 揭秘 Java 跨系統文件路徑組裝的秘方!

標簽:
  • 熱門焦點
  • 掘力計劃第 20 期:Flutter 混合開發的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發實戰詳解》作者,掘金優秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發的混亂之治。Flutter 基于自研的 Skia 引擎
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的&ldquo;網紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內直播,
  • 網傳小米汽車開始篩選交付中心 建筑面積不低于3000平方米

    7月7日消息,近日有微博網友@長三角行健者爆料稱,據經銷商集團反饋,小米汽車目前已經開始了交付中心的篩選工作,要求候選場地至少有120個車位,建筑不能低
  • iQOO 11S新品發布會

    iQOO將在7月4日19:00舉行新品發布會,推出杭州亞運會電競賽事官方用機iQOO 11S。
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
  • 2022爆款:ROG魔霸6 冰川散熱系統持續護航

    喜逢開學季,各大商家開始推出自己的新產品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現在的
Top 主站蜘蛛池模板: 阳春市| 武川县| 高台县| 安化县| 湘潭县| 关岭| 古交市| 静安区| 教育| 甘孜县| 安岳县| 沈阳市| 密云县| 濮阳县| 六枝特区| 永修县| 长顺县| 大港区| 怀仁县| 乌兰浩特市| 慈溪市| 平阳县| 水城县| 阳曲县| 兴海县| 长宁区| 和田市| 武安市| 昭通市| 广东省| 东乌珠穆沁旗| 巧家县| 罗源县| 磐石市| 庄浪县| 霍州市| 扎囊县| 天台县| 五指山市| 汝州市| 华宁县|