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

歡迎訪問 生活随笔!

生活随笔

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

java

java堆内与堆外数据交互_Java:汇总堆外数据

發(fā)布時間:2023/12/3 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java堆内与堆外数据交互_Java:汇总堆外数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

java堆內(nèi)與堆外數(shù)據(jù)交互

探索如何以最小的垃圾回收影響和最大的內(nèi)存利用率創(chuàng)建堆??外聚合。

使用Java Map,List和Object創(chuàng)建大型聚合通常會產(chǎn)生大量堆內(nèi)存開銷。 這也意味著,一旦聚合超出范圍,垃圾收集器將必須清理這些對象。

閱讀這篇簡短的文章,了解如何使用Speedment Stream ORM創(chuàng)建堆外聚合,這些聚合可以更有效地利用內(nèi)存,而對GC的影響很小或沒有。

假設(shè)我們有大量采用以下形狀的Person對象:

public class Person {private final int age;private final short height;private final short weight; private final String gender;private final double salary;…// Getters and setters hidden for brievity }

出于爭論的目的,我們還可以訪問一個名為persons()的方法,該方法將使用所有這些Person對象創(chuàng)建一個新的Stream 。

每年齡工資

我們想為每個年齡段創(chuàng)建平均工資。 為了表示匯總的結(jié)果,我們將使用稱為AgeSalary的數(shù)據(jù)類,該數(shù)據(jù)類將某個年齡與平均工資相關(guān)聯(lián)。

public class AgeSalary {private int age;private double avgSalary;… // Getters and setters hidden for brievity }

工資的年齡分組通常只需要使用不到100個存儲桶,因此此示例僅用于說明原理。 存儲桶越多,聚集異端越有意義。

使用Speedment Stream ORM,我們可以通過以下三個步驟得出堆外聚合解決方案:

創(chuàng)建一個聚合器

var aggregator = Aggregator.builderOfType(Person.class, AgeSalary::new).on(Person::age).key(AgeSalary::setAge).on(Person::salary).average(AgeSalary::setAvgSalary).build();

聚合器可以反復(fù)使用。

計算聚合

var aggregation = persons().collect(aggregator.createCollector());

使用聚合器,我們創(chuàng)建了一個標準Java流收集器,其內(nèi)部狀態(tài)完全處于堆外。

使用匯總結(jié)果

aggregation.streamAndClose().forEach(System.out::println);

由于聚合保存的是非堆存儲的數(shù)據(jù),因此可以從顯式關(guān)閉中受益,而不僅僅是在很長時間之后才進行清理。 可以通過調(diào)用close()方法(可能是利用AutoCloseable特性close()來完成關(guān)閉聚合的操作,或者如上例所示,使用streamAndClose()返回流,該流將在終止流后關(guān)閉Aggregation 。

一站式服務(wù)

上面的代碼可以簡化為一種有效的代碼:

persons().collect(Aggregator.builderOfType(Person.class, AgeSalary::new).on(Person::age).key(AgeSalary::setAge).on(Person::salary).average(AgeSalary::setAvgSalary).build().createCollector() ).streamAndClose().forEach(System.out::println);

還支持并行聚合。 只需添加流操作Stream::parallel并使用ForkJoin池完成聚合。

資源資源

在此處下載Speedment

在此處閱讀有關(guān)堆外聚合的更多信息

翻譯自: https://www.javacodegeeks.com/2018/12/java-aggregate-data-heap.html

java堆內(nèi)與堆外數(shù)據(jù)交互

總結(jié)

以上是生活随笔為你收集整理的java堆内与堆外数据交互_Java:汇总堆外数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。