Java:汇总堆外数据

探索如何以最小的垃圾收集影响和最大的内存利用率创建堆​​外聚合。

堆外聚合

使用Java Map,List和Object创建大型聚合通常会产生大量堆内存开销。 这也意味着,一旦聚合超出范围,垃圾收集器将必须清理这些对象。

阅读这篇简短的文章,了解如何使用Speedment Stream ORM创建堆外聚合,这些聚合可以更有效地利用内存,而对GC的影响很小或没有。

假设我们有大量具有以下形状的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对象创建一个新的Stream

每年龄工资

我们要为每个年龄段创建平均工资。 为了表示汇总的结果,我们将使用称为AgeSalary的数据类,该数据类将某个年龄与平均工资相关联。

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

工资的年龄分组通常需要使用少于100个存储桶,因此此示例仅用于说明原理。 存储桶越多,聚集异常堆的意义就越大。

使用Speedment Stream ORM,我们可以通过以下三个步骤得出堆外聚合解决方案:

创建一个聚合器

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

聚合器可以反复使用。

计算聚合

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

使用聚合器,我们创建了一个标准的Java流收集器,其内部状态完全处于堆外。

使用汇总结果

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

由于聚合保存的是堆外存储的数据,因此可以从显式关闭中受益,而不仅仅是在很长时间之后才进行清理。 可以通过调用close()方法(可能是利用AutoCloseable特性close()来完成关闭聚合的操作,或者如上例所示,使用streamAndClose()返回流,该流将在流终止后关闭Aggregation

一站式服务

上面的代码可以简化为一种有效的代码:

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

在此处阅读有关堆外聚合的更多信息

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中属性外部化_用Java可外部化

java中属性外部化在理解Externalizable接口之前,您需要了解序列化。您可以在java中的序列化上阅读有关序列化的更多信息。 Java提供了一种称为序列化的机制,以按字节的有序或字节序列的形式持久化Java对象,其中包括对象的数据以及有关对象的…

在您的Maven-Fu包中增加了一些东西

Apache Maven很简单,但是功能非常强大。 使用一些技巧,您可以大大简化和优化您的开发经验。 处理多个非托管模块 假设您有一个主项目A提供了两个实用程序模块foo和bar ,另一个项目B A了foo和bar 。 在使用B ,您意识到需要偶尔对…

ci 邮件 html模板,CI Email类发邮件

发邮件代码详情private function _send_mail($data) {//附件一,名称参数编码转换if(!empty($data[resume_name])){$file_name iconv(UTF-8,GB2312,$data[file_name]);}//附件二,名称参数编码转换if(!empty($data[resume_name])){$resume_name iconv(UT…

Java安全动画

总览 自从JDK 1.2中引入安全沙箱模型以及JDK提供的安全API的发展以来,Java安全就一直是一个复杂的话题。 并发实用程序也观察到类似的问题,并且开发了一种名为Java Concurrent Animated的工具,目的是通过有趣而有趣的方式降低进入这些实用程序…

在计算机网络系统的远程通信中,在计算机网络系统的远程通信中,通常采用的传输技术是...

摘要:算机体系体系模板模板最适宜采用的合钢是组。系统信中民主命叙主义关于革命以下义革误的和社会主述错是(。程通常采传输不属民主主义济纲的三大经以下于新领的是(。...算机体系体系模板模板最适宜采用的合钢是组。网络不属特殊国无级自的是产阶以下于中有的优点…

ajax div 赋值重新渲染_优化向:单页应用多路由预渲染指南

前言Ajax 技术的出现,让我们的 Web 应用能够在不刷新的状态下显示不同页面的内容,这就是单页应用。在一个单页应用中,往往只有一个 html 文件,然后根据访问的 url 来匹配对应的路由脚本,动态地渲染页面内容。单页应用在…

fpga运算服务器_一张图了解CPU、GPU、ASIC、FPGA性能、功耗效率、灵活性

​CPU:中央处理器(Central Processing Unit,CPU):通用芯片,主要生产厂家如intel、AMD等,用于PC、服务器等领域。CPU作为通用芯片,可以用来做很多事情,灵活性最高&#xf…

aspen变压吸附塔_空压机科普:吸附式干燥机的结构和原理

精彩内容本文以主流的“变压吸附式”干燥机为例进行讲解。“吸附”原理一致,“脱附再生”流程有所区别。从而大致形成以下几种常见类型:●无热吸附式——使用一部分经过干燥后的压缩空气,经降压后吹扫吸附剂,实现吸附剂“再生”&a…

小学计算机管理,小学计算机室管理制度

小学计算机室管理制度 (2页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!19.90 积分芹菜小学计算机室制度1、计算机室由上电脑课老师负责管理。2、计算机室是进行电脑技术学习和操作的场所&#xff…

异形3×3魔方还原教程_【初级篇】(四)最简单的三阶魔方入门教程——中层还原...

本系列教程适合刚刚接触魔方,又比较有好奇心,是为渴望学会还原魔方,又不想死记公式的人准备的。全部教程只使用三种公式,还原过程以理解为主,公式为辅。第四部分 中层棱块还原4.1 预览中层棱块还原后的效果中层还原以后…

吞吐量-Corda的故事

我最近开展了一个针对特定用例的Corda性能项目。 这个项目的结果使我们在170多个节点的网络上一天之内处理了1.15亿个请求。 此外,Corda每秒能够处理6300个请求,确认满足了网络的最高要求。 迄今为止,这是迄今为止已部署的最大的Corda网络&am…

httpurlconnect设置中文参数_数控三菱CNC机床参数的设置及报警解除!

数控三菱CNC的硬件连接检查与设置执行完毕向系统送电后,显示器上的READY绿灯仍然不亮。而且在〔诊断〕――〔报警〕 画面上显示很多报警内容,哪些是开机时必须设置的呢?又如何解除故障报警呢?1.开机参数1.1 基本参数的设置原装系统…

计算机如何更新苹果系统,苹果系统怎么更新_苹果电脑mac如何更新升级系统-win7之家...

苹果电脑跟windows系统一样,也是会在发布之后不断的推送新版本让用户们进行升级,不仅可以修复bug还可以增加新功能,不过很多用户可能都会有一个疑问,就是苹果系统怎么更新呢?方法并不难,本文给大家讲述一下…

手术步骤_近视飞秒激光手术和传统Lasik手术比较

传统LasikLASIK手术操作时分为两个步骤:第一个步骤医生需要制作一个角膜瓣;第二个步骤是掀开角膜瓣,以准分子激光雕琢角膜,进行视力矫正,雕琢完毕后将角膜瓣复位即手术完成。传统的角膜制瓣是用机械式的设备与一个微型…

jenkins部署java_在Window上使用Jenkins自动部署和上传快照Java工件

jenkins部署java这篇文章将展示如何使用Jenkins Continuous Integration自动执行Java Web应用程序(使用MYSQL DB和基于Hibernate ORM在基于REST的Jersey2 Spring环境中开发的学生申请应用程序)的部署过程-生成项目,运行单元测试,上…

苹果电脑怎么更换计算机模式,图文详解苹果电脑如何切换成windows系统

苹果电脑默认安装的是Mac系统,有的人很喜欢,有一部分人却怎么都用不习惯,觉得windows系统用起来比较顺手。为了能提高办公效率,给苹果电脑安装双系统,那么有什么办法能将苹果电脑切换成windows系统?方法当然…

input内的字体颜色_嘉兴市硅胶喷涂颜色油订制

嘉兴市硅胶喷涂颜色油订制,博越硅胶服务惠万家,欢迎惠顾。嘉兴市硅胶喷涂颜色油订制, 而它配合硅胶原材制作时是按照相应的比例来进行分配在加上硫化剂的配合才能够得到制作产品的原材料,色母的性能选择也影响着一个产品的性能&am…

计算机部件动漫,因一个片段肝了整部番,电脑配件上榜,它满屏“虎狼之词”...

原标题:因一个片段肝了整部番,电脑配件上榜,它满屏“虎狼之词”现在的动漫行业格外迎来了鼎盛时期,就连以前不被看好的国漫最近几年也是突飞猛进。一部动漫想要有人看,就必定有自己的亮点,甚至一句话一个场…

获取周一_Ace足球网冬至版周一推介

WINTER SOLSTICE冬至冬至又称“冬节”、“贺冬”,华夏二十四节气之一、八大天象类节气之一,与夏至相对。Ace足球网祝全体球友冬至快乐身体健康 波运亨通Lorem Ipsum周一推介微信支付失败,请使用支付宝购买推介后请与Ace客服联系获取推介请勿相信其他客服…

oauth2和jwt_使用具有OAuth2的Web应用程序和JWT的使用来调用API – WSO2 API Manager

oauth2和jwt在这篇文章中,我将分享我在WSO2 API管理器(API-M)中针对行业中非常常见且有用的场景的经验和理解。 简要地说明以下流程。 公开了一个API,供应用程序开发人员在API管理器的控制下使用(这增加了对该API的访…