java堆内与堆外数据交互_Java:汇总堆外数据
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go比java快多少_Java 11快多
- 下一篇: java 动画_Java安全动画