OpenHFT Java Lang项目
OpenHFT / Java Lang從Apache 2.0庫(kù)開始,提供Java Chronicle使用的低級(jí)功能,而無(wú)需持久存儲(chǔ)到文件中。 這允許對(duì)數(shù)據(jù)進(jìn)行可序列化和反序列化,以及對(duì)本機(jī)空間(堆外)中的內(nèi)存的隨機(jī)訪問。它支持使用對(duì)象池寫入和讀取可枚舉類型。 例如,在不創(chuàng)建對(duì)象的情況下編寫和讀取String(如果已將其池化)。 它還支持以二進(jìn)制和文本形式寫入和讀取原始類型,而不會(huì)產(chǎn)生任何垃圾。 小消息可以在微秒內(nèi)序列化和反序列化。
最近增加
Java Lang支持DirectStore,類似于ByteBuffer,但可以是任意大小(在大多數(shù)系統(tǒng)上,最大為40到48位)。它支持64位大小和偏移量。 它支持壓縮類型和對(duì)象序列化。 它還支持線程安全功能,例如易失性讀取,有序(惰性)寫入,CAS操作以及將int(4字節(jié))用作本機(jī)內(nèi)存中的鎖。
在Java中測(cè)試本機(jī)內(nèi)存鎖
該測(cè)試具有一個(gè)鎖和一個(gè)可切換的值。 一個(gè)線程將值從0更改為1,另一個(gè)線程將其從1更改為0。這大約進(jìn)行了2000萬(wàn)次,但運(yùn)行時(shí)間更長(zhǎng)
final DirectStore store1 = DirectStore.allocate(1L << 12);final int lockCount = 20 * 1000 * 1000;new Thread(new Runnable() {@Overridepublic void run() {manyToggles(store1, lockCount, 1, 0);}}).start();manyToggles(store1, lockCount, 0, 1);store1.free();manyToggles方法更有趣。 請(qǐng)注意,將偏移量為0的4個(gè)字節(jié)用作鎖定。 您可以通過這種方式在本機(jī)空間中安排任意數(shù)量的鎖。 例如,您可能有固定長(zhǎng)度的記錄,并希望能夠在更新或訪問它們之前將其鎖定。 您可以在記錄的“開頭”放置一個(gè)鎖。
private void manyToggles(DirectStore store1, int lockCount, int from, int to) {long id = Thread.currentThread().getId();assertEquals(0, id >>> 24);System.out.println("Thread " + id);DirectBytes slice1 = store1.createSlice();for (int i = 0; i < lockCount; i++) {assertTrue(slice1.tryLockNanosInt(0L, 10 * 1000 * 1000));int toggle1 = slice1.readInt(4);if (toggle1 == from) {slice1.writeInt(4L, to);} else {i--;}slice1.unlockInt(0L);}}DataStore的大小及其中的偏移量很長(zhǎng),因此您可以將連續(xù)的本機(jī)內(nèi)存塊分配到多個(gè)GB中,并根據(jù)需要進(jìn)行訪問。 在我的2.6 GHz i5筆記本電腦上,此測(cè)試獲得以下輸出
Contended lock rate was 9,096,824 per second這看起來(lái)不錯(cuò),但在激烈的爭(zhēng)用中,可以保留一個(gè)線程。 這對(duì)于許多鎖和較低的爭(zhēng)用更為有用。 注意:如果我將超時(shí)時(shí)間從10毫秒降低到1毫秒,它最終將失敗,這意味著有時(shí)需要花費(fèi)超過1毫秒的時(shí)間才能獲得鎖定!
結(jié)論
Java Lang庫(kù)正在采取步驟,使其更容易使用具有堆上可用功能的本機(jī)內(nèi)存。 語(yǔ)言支持不是很好,但是如果需要存儲(chǔ)128 GB的數(shù)據(jù),則可以使用堆外內(nèi)存獲得更好的GC行為。
參考:來(lái)自Vantage Java博客的JCG合作伙伴 Peter Lawrey的OpenHFT Java Lang項(xiàng)目 。翻譯自: https://www.javacodegeeks.com/2013/07/openhft-java-lang-project.html
總結(jié)
以上是生活随笔為你收集整理的OpenHFT Java Lang项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑显卡接口顺序图解法(电脑显卡接口位置
- 下一篇: 设计模式:策略