日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java,Scala,Guava和Trove集合-它们可以容纳多少数据?

發(fā)布時間:2023/12/3 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java,Scala,Guava和Trove集合-它们可以容纳多少数据? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關于我們的數(shù)據(jù)結構,令人著迷的事情之一是,即使我們對它們非常熟悉,我們仍然很難說出像HashMap這樣基本的東西在1GB的內存中可以容納多少個項目。 我們可能會在學校,高級開發(fā)人員那里學到這一點,或者由于數(shù)據(jù)結構選擇不當而導致服務器崩潰時,可能會遇到困難。 所以我決定這樣做。 我從約20個最流行的Java,Scala,Guava和Trove集合中進行了測試,并測試了它們中每個具有1GB內存的JVM可以容納多少個隨機整數(shù)(通過-Xmx)。 對于每個數(shù)據(jù)結構,我們都附加int直到收到OutOfMemoryError為止,該錯誤結束了測試。 為了確保一致性,我們在JDK 7上運行了每個測試5次。 對于這種基本測試,我發(fā)現(xiàn)其中一些結果令人驚訝。 *我想我們不在同一頁上,因為這不是競爭。 不同的集合具有不同的語義。 我也沒有包括時間,因為重點不是微基準測試性能,而是讓我們了解我們日常使用的收藏實際上可以容納多少。

結果

  • Scala的集合具有比Java更大的容量。 Scala集合似乎比Java集合更有效率。 雖然某些集合(例如TreeSets)的表現(xiàn)大致相同,但其他集合(例如Scala的HashMaps)卻能夠容納近15%的項目。 HashSet可以容納的項目比Java同類項目多8%。 我很想聽聽社區(qū)人士為什么這么認為。 Scala的ArrayBuffer相對于ArrayList具有一點優(yōu)勢。
  • 唯一的例外是Scala的鏈表,它比Java的LinkedList所保存的數(shù)據(jù)少18%。 這里的一個約束是,為了追加到列表,它需要接收另一個鏈接列表而不是直接值。 即使這樣,假設臨時列表是GC的,它本身也不會影響列表在1GB JVM中的容納容量。

*我們正在計算持有的int數(shù),這意味著每張地圖插入2 int。

  • 如果您不使用Trove,那么您會錯過。 從第一天開始,我們就一直在Takipi的后端上使用Trove的收藏。 好吧,可悲的是從第一天開始,因為這將為我們節(jié)省大量時間來優(yōu)化服務器代碼。 TIntArrayList能夠容納250%的Scala和Java盒裝同類產品,這些數(shù)字足以說明一切。
  • 對于地圖觀察到相似的比率。 令人驚訝的是,Trove的映射性能超過Java和Scala列表超過50%。 請記住,您還具有從int到Object的Trove集合映射,反之亦然,因此您不需要完全原始的映射即可享受容量的好處。
  • 即使這樣,我們仍然看到Trove的TIntLinkedList可以容納比裝箱它們的原語的Java ArrayList或Scala ArrayBuffer少的數(shù)據(jù)。 這確實使您可以查看在您的代碼中大量使用的鏈表并重新考慮-我絕對需要它嗎?
  • 由于使用Trove集合與標準庫的集合實際上沒有開銷,因此我不會將使用它們歸類為“按需優(yōu)化”方案。 這是因為內存消耗錯誤通常會在規(guī)模上顯現(xiàn),這是最難發(fā)現(xiàn)的錯誤,因此您必須開始進行生產調試 (當然Trove不會使您擺脫固有的效率低下的算法)。 有時可能是分析核心轉儲和觀看巨人比賽之間的區(qū)別。
  • 番石榴–大地圖,小套。 番石榴的多套產品比Java和Scala的同類產品價格更高。 與Scala的設置相比,它們能夠保存少19%的數(shù)據(jù)。 不利的一面當然是,他們可以執(zhí)行使用標準集合語義不可能完成的事情。 只要多集將在您的內存結構中扮演重要角色,請確保您需要這些。
  • 對于多貼圖,我們看到的情況恰恰相反。 Guava的MultiHashMap比Java的hashmap擁有的值多20%,比Scala的多10%。 看到雖然Guava的多集在容量方面不及Java和Scala等價物,但MultiMap實際上卻勝過Java和Scala。

那里有更多的集合類型(隊列,堆棧等),但是我想從基礎開始,并為每個受歡迎的需求添加更多。 因此,如果您想在列表中看到另一個收藏夾,或者想進一步了解某些功能上的差異,請在下面的評論部分中知道該怎么做。

  • 該代碼可在此處獲得 。

參考: Java,Scala,Guava和Trove集合-它們可以容納多少數(shù)據(jù)? 來自我們的JCG合作伙伴 Tal Weiss的Takipi博客。

翻譯自: https://www.javacodegeeks.com/2014/01/java-scala-guava-and-trove-collections-how-much-data-can-they-hold.html

總結

以上是生活随笔為你收集整理的Java,Scala,Guava和Trove集合-它们可以容纳多少数据?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。