1. gzyueqian
      18529173453

      Java培訓(xùn):如何在Java序列化中獲得C++速度

      更新時(shí)間: 2022-11-10 14:36:59來(lái)源: 粵嵌教育瀏覽量:8358

        對(duì)于任何低延遲軟件來(lái)說(shuō),最常見(jiàn)的操作引入最小延遲是至關(guān)重要的。例如,在交易軟件中,一個(gè)常見(jiàn)的、對(duì)時(shí)間敏感的操作是微服務(wù)之間的消息傳遞。為了最小化通信的內(nèi)存占用,所有消息都由發(fā)送方序列化,由接收方反序列化。因此,從性能的角度來(lái)看,序列化/反序列化過(guò)程引入最小的延遲是至關(guān)重要的。對(duì)Java感興趣的同學(xué),可以參加Java培訓(xùn)來(lái)獲得知識(shí)和技能,以便快速上崗。

        閱讀本文,了解更多關(guān)于Java中利用C++方法論的低延遲技術(shù):普通的可復(fù)制對(duì)象和和內(nèi)存。使普通操作更快一點(diǎn),從而在聚合操作中節(jié)省大量時(shí)間。瑣碎可復(fù)制對(duì)象的序列化速度可以比常規(guī)Java對(duì)象快五倍以上,并且由Chronicle服務(wù)等Chronicle庫(kù)支持。

        

        普通的可復(fù)制對(duì)象——用Java?

        平凡的可復(fù)制對(duì)象在C++開發(fā)中很常見(jiàn),但是如果你不熟悉這個(gè)術(shù)語(yǔ),一個(gè)類比可能有助于展示它們的優(yōu)勢(shì)。

        假設(shè)你在一家倉(cāng)庫(kù)工作,你經(jīng)常在最后一刻接到兩個(gè)foo和一個(gè)bar的訂單,該發(fā)貨了。foo位于倉(cāng)庫(kù)的西邊,bar位于東邊,因此你需要訪問(wèn)倉(cāng)庫(kù)的兩端來(lái)收集訂單。這需要時(shí)間。如果對(duì)于這種常見(jiàn)的最后一分鐘訂單,你可以將組件放在一個(gè)地方,情況會(huì)怎樣?然后,無(wú)論何時(shí)你收到時(shí)間緊迫的訂單,你都可以快速地收集并發(fā)送它們。想掌握 Java 技術(shù)的同學(xué)不妨報(bào)個(gè)Java培訓(xùn)班,可以節(jié)省學(xué)習(xí)時(shí)間,提高學(xué)習(xí)效率,在短時(shí)間內(nèi)學(xué)有所成,還能找到一份不錯(cuò)的工作。

        將組件保存在一個(gè)地方,大致上是普通可復(fù)制對(duì)象的概念,所有信息都存儲(chǔ)在一個(gè)連續(xù)的內(nèi)存塊中。由于所有數(shù)據(jù)都在一個(gè)位置,因此可以通過(guò)一次操作將數(shù)據(jù)從該存儲(chǔ)位置復(fù)制到另一個(gè)位置。在C++中,這可以使用memcpy來(lái)實(shí)現(xiàn),這是復(fù)制數(shù)據(jù)最快的方法。

        常規(guī)Java對(duì)象包含對(duì)對(duì)象或非原始數(shù)據(jù)類型的引用,它們存儲(chǔ)在不同的內(nèi)存位置。復(fù)制這樣一個(gè)Java對(duì)象需要多個(gè)內(nèi)存副本,類似于在倉(cāng)庫(kù)中跑來(lái)跑去。因此,復(fù)制Java對(duì)象在延遲方面代價(jià)很高。

        

        幸運(yùn)的是,我們可以利用提到的C++方案,使Java序列化更快。關(guān)鍵是創(chuàng)建普通的可復(fù)制Java對(duì)象,即簡(jiǎn)單到可以在一次操作中復(fù)制的對(duì)象。要求?僅使用原始數(shù)據(jù)字段。因?yàn)樵Z(yǔ)字段具有固定的大小,所以普通的可復(fù)制對(duì)象的大小是靜態(tài)的,因此該對(duì)象可以存儲(chǔ)在單個(gè)存儲(chǔ)塊中。只使用原始數(shù)據(jù)類型似乎有局限性,但是即使是具有非原始字段的對(duì)象也常常可以被轉(zhuǎn)換成普通的可復(fù)制對(duì)象。

        Chronicle系列化基準(zhǔn)

        Chronicle序列化庫(kù)完全支持Java中的瑣碎可復(fù)制對(duì)象,實(shí)現(xiàn)了更快的數(shù)據(jù)序列化。

        在下面所示的基準(zhǔn)測(cè)試中,使用了兩個(gè)微服務(wù)應(yīng)用程序,其中一個(gè)通過(guò)持久化隊(duì)列向另一個(gè)發(fā)送BookUpdates。BookUpdate類要么是一個(gè)“普通對(duì)象”,帶有符號(hào)、交換、時(shí)間作為String對(duì)象和一個(gè)請(qǐng)求和出價(jià)列表,要么是“普通可復(fù)制對(duì)象”,這些字段映射到原始字段,如int、long或double字段。在java培訓(xùn)中,有更加系統(tǒng)全面的課程,明確清晰的學(xué)習(xí)路線,學(xué)習(xí)起來(lái)既輕松,又高效。

        如下文所示,在典型情況下,瑣碎可復(fù)制對(duì)象的序列化和反序列化比常規(guī)對(duì)象快5倍以上(50%)。所有時(shí)間都以微秒為單位。

        普通對(duì)象

        

        普通可復(fù)制對(duì)象

        

        較高的百分位數(shù)顯示兩種變體之間的差異較小,可能與串行化以外的其他事情有關(guān),例如SSD設(shè)備延遲。

        這種方法的缺點(diǎn)是什么?

        雖然使用memcpy是有效的,但Java標(biāo)準(zhǔn)將對(duì)象如何在內(nèi)存中布局留給JVM實(shí)現(xiàn)者。這意味著不能保證使用一種類型的JVM(例如OpenJDK)發(fā)送的對(duì)象可以使用另一種類型JVM(如J9)正確接收。然而,對(duì)于任何給定的JVM類型,內(nèi)存布局都是穩(wěn)定的,因此如果全面使用同一系列JVM,應(yīng)該不會(huì)出現(xiàn)問(wèn)題。添加集成測(cè)試非常容易,確保完全兼容。

        結(jié)論

        通過(guò)在Java開發(fā)中應(yīng)用瑣碎可復(fù)制對(duì)象的原理,可以顯著改善序列化和反序列化的延遲足跡。這類對(duì)象的關(guān)鍵原則是,它們只包含原始數(shù)據(jù)字段,好消息是,即使是非原始數(shù)據(jù)字段的對(duì)象也常常可以轉(zhuǎn)換為普通的可復(fù)制對(duì)象。Chronicle Services為Java中的瑣碎可復(fù)制對(duì)象提供了獨(dú)特的支持,與常規(guī)Java對(duì)象相比,它實(shí)現(xiàn)了五倍多的序列化速度。想學(xué)習(xí)更多 Java 知識(shí)和技能,建議參加java培訓(xùn),課程實(shí)時(shí)更新,緊跟市場(chǎng)和企業(yè),讓你學(xué)到最新的java技能,提高市場(chǎng)競(jìng)爭(zhēng)力。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 一本久久国产视频 | 夜夜38亚洲综合网 | 亚洲中文字字幕精品 | 午夜三级国产精品理论三级 | 亚洲国产精品欧美日韩一区二区 | 香蕉久久精品曰曰躁夜夜躁 |