使用直接内存时可以更快

总览

使用直接内存不能保证提高性能。 考虑到它增加了复杂性,除非有充分的理由使用它,否则应避免使用它。

塞尔吉奥·奥利维拉(Sergio Oliveira Jr)的这篇出色文章表明,这不仅仅是使用直接内存来提高性能的问题, 哪个更快:Java堆还是本机内存?

当您有大量数据和/或必须对这些数据执行一些IO时,直接内存和内存映射文件可以提供帮助。

时间序列数据。

时间序列数据往往具有大量条目,并且需要IO来加载和存储数据。 这使其成为内存映射文件和直接内存的理想选择。

我在这里提供了一个例子。 main和测试 ,对常规对象和内存映射文件执行相同的操作。 注意:我不建议访问对象的速度很慢,但是使用对象的开销是个问题。 例如,加载,创建,对象标题的大小,垃圾回收和保存对象。

该测试将时间和时间两列(买入价和卖价(以int值标准化))加载到时间序列数据中,该数据用于计算和保存简单的中间价格基点移动。 该测试执行一个GC,以包括管理所涉及对象的开销。

存储 百万 千万 3000万 1亿 2.5亿
对象 0.55秒 4.4秒 16.7秒 86.7秒 225秒
地图 0.056秒 0.46秒 1.3秒 4.5秒 11秒

完整结果

对于较小的数据集,内存映射数据不仅速度快10倍,对于较大的数据量,它的伸缩性也更好,因为

  • 内存映射的数据一旦映射到内存中就可以使用
  • 它仅创建少量对象,几乎没有堆脚印,从而减少了GC时间。
  • 您可以根据需要将其安排在内存中,因为每行没有对象,因此可以减少每行的开销。
  • 不必额外做任何事情来保存数据。

使用直接内存和内存映射文件并不像使用Java对象那样简单,但是如果您有大量数据需求,则可能会有很大的不同。

我已经在之前的文章中讨论过,对于低延迟要求,使用直接内存和内存映射文件也可以有很大的不同。

参考: 使用 Vanilla Java博客的JCG合作伙伴 Peter Lawrey 可以更快地使用直接内存 。

翻译自: https://www.javacodegeeks.com/2012/11/when-using-direct-memory-can-be-faster.html

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

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

相关文章

POJ 3977 折半枚举

链接: http://poj.org/problem?id3977 题意: 给你n个数,n最大35,让你从中选几个数,不能选0个,使它们和的绝对值最小 如果有一样的,取个数最小的 题解: np难题,但是因为…

java踩坑记

1.String 相等 稍微有点经验的程序员都会用equals比较而不是用 ,但用equals就真的安全了吗,看下面的代码 user.getName().equals("xiaoming"); 有经验的老司机很快就能看到问题,如果user.getName()为null,就会抛出空指针异常&#…

java taken_java-是否有正确的方法在slf4j中传递参数?

第三变种是最好的。实际上,第一种情况是通过StringBuilder进行的字符串连接。第二和第三种情况相同。他们需要将整数值装箱到Integer(或其他Object),然后创建一个数组来打包它们。在我的机器上进行的简单测试表明,如果不执行日志记录&#xf…

html常用小知识

请求重定向&#xff1a;加载页面之后&#xff0c;除了用js做重定向之外&#xff0c;我们还可以直接用<meta>标签做重定向。 1 <meta http-equiv"refresh" content"5;urlhttp://www.baidu.com" /> 5秒后跳转 超链接&#xff1a;在当前的iframe…

MyEclipse快捷键大全【转】

-------------------------------------MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl1 快速修复CtrlD: 删除当前行 CtrlQ 定位到最后编辑的地方 CtrlL 定位在某行 CtrlO 快速显示 OutLine CtrlT 快速显示当前类的继承结构 CtrlW 关闭当前Editer Ct…

根据您的命令-命令设计模式

命令设计模式是一种广为人知的设计模式&#xff0c;它属于行为设计模式&#xff08;“四人帮”的一部分&#xff09;。 顾名思义&#xff0c;它与应用程序中的动作和事件有关。 问题陈述&#xff1a; 假设有一个网页将在其中包含多个菜单的情况。 编写此代码的一种方法是使条件…

用js和jQuery做轮播图

Javascript或jQuery做轮播图 css样式 <style> a{ text-decoration:none; } .naver{ width: 100%; position:relative; }.images{position:relative;width: 100%;height: 400px; } .images img{position:absolute;left: 0;top: 0;width: 100%;height: 400px;opacity: 0;fi…

w3school前端教程合集

有关前端开发的w3c教程合集。 http://caibaojian.com/w3school/ 地图ajax教程Canvas教程CSS教程CSS3教程CSS3选择器CSS参考手册DHTML教程HTML教程HTML5教程HTML5音频教程HTML DOM教程JavaScript教程jQuery教程jQuery Ajax教程jQuery事件jQuery操作jQuery选择器jQuery遍历json教…

【开发调试】谷歌浏览器中调试移动网页和测试网速下页面效果

、 今天有幸给大家分享一下谷歌浏览器针对移动网页测试的技巧&#xff0c;主要是最近做个微信公共号网站。所以就要对页面测试拉。移动网页我们最长测得就是各种手机大小的页面效果和出现网络问题的效果展示。 今天就简单分享下在谷歌浏览器测试页面的适配和网速限制展示。…

拼多多分享好友砍价Java实现_拼多多砍价怎么分享到朋友圈 砍价发到微信朋友圈方法...

拼多多是一款电商社交的共享式购物平台&#xff0c;现在还推出了砍价的活动&#xff0c;只要邀请好友砍价&#xff0c;你就以最低的价格购买商品&#xff0c;还可以可能是免费拿到&#xff0c;那么今天小编就给大家讲讲如何将自己的砍价信息分享到微信朋友圈。首先下载手机拼多…

通过6个简单的步骤在Windows上运行Apache Hive

注意 &#xff1a;您需要安装cygwin才能运行本教程&#xff0c;因为Hadoop&#xff08;Hive需要&#xff09;需要cygwin才能在Windows上运行。 至少&#xff0c;系统中必须存在Basic&#xff0c;Net&#xff08;OpenSSH&#xff0c;tcp_wrapper软件包&#xff09;和与安全相关的…

vim编辑器初级(八)

:abbreviate  后面接一个缩写&#xff0c;再接这个缩写的全写&#xff0c;这样在输入这个缩写后&#xff0c;vim会自动将其展开为它的全写 :abbreviate  列出目前你所设置的所有缩写 :map  后面接一个字符串&#xff0c;再接这个字符串所映射的一串命令&#xff0c;这样在…

java多文件post请求_如何使用Java发出多部分/表单数据POST请求?

我们使用HttpClient 4.x创建多部分文件post。更新&#xff1a;截至HttpClient 4.3&#xff0c;一些类已被弃用。下面是新API的代码&#xff1a;CloseableHttpClient httpClient HttpClients.createDefault();HttpPost uploadFile new HttpPost("...");MultipartEnt…

vue 环境的搭建及初始化项目

其实超级简单&#xff0c;虽然网上很多&#xff0c;但是我顺便记录下相当于做笔记吧 1nodejs 的安装&#xff0c; 在node官网下载&#xff0c;点击安装&#xff0c;安装的时候最好选择路径在d盘 2设置环境变量 我的电脑-->属性-->系统环境变量- 系统变量新增一个NODE…

Java堆转储:您可以完成任务吗?

如果您像我一样对Java性能充满热情&#xff0c;那么堆转储分析对您来说应该不是一个谜。 如果是这样&#xff0c;那么好消息是您将有机会提高您的Java故障诊断技能和JVM知识。 JVM现已发展到今天&#xff0c;与旧的JDK 1.0 – JDK 1.4天相比&#xff0c;今天生成和分析JVM堆转…

MariaDB配置、集群

MariaDB在centos 7.3的安装&#xff0c;配置和集群搭配 阿里云最新选配系统中&#xff0c;只有centos7.3可选&#xff0c;因此&#xff0c;基于centos 7的MariaDB的安装&#xff0c;配置。。。 全部删除MySQL/MariaDB MySQL 已经不再包含在 CentOS 7 的源中&#xff0c;而改用了…

java 调用 ictclas50_1-Ictclas50分词系统ForJava

Ictclas50是一个分词库&#xff0c;我嘛主要用来做中文分词&#xff0c;其也能分出词性等东西。1.环境搭建进入到下载页面进行下载&#xff1a;如下图&#xff1a; 因为我的系统是64位的windows&#xff0c;所以选择了到数第三行进行下载。其JAVA版本是通过JNI去调用dll库&…

SpringMVC乱码或前台乱码解决办法

JSP页面乱码 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> 以及 form表单提交方式为必须为post 修改web.xml&#xff0c;增加编码过滤器&#xff0c;如下&#xff08;注意&#xff0c;需要设置forceEncoding参数值…

Beam概念学习系列之Pipeline Runners

不多说&#xff0c;直接上干货&#xff01; https://beam.apache.org/get-started/beam-overview/ 在 Beam 管道上运行引擎会根据你选择的分布式处理引擎&#xff0c;其中兼容的 API 转换你的 Beam 程序应用&#xff0c;让你的 Beam 应用程序可以有效的运行在指定的分布式处理引…

使普通的旧Java OSGi兼容

尽管OSGi在Java世界中越来越流行&#xff0c;但仍有许多Java应用程序和库尚未设计成可在OSGi中使用。 有时您可能需要在OSGi环境中运行这样的代码&#xff0c;或者是因为您想利用OSGi本身提供的好处&#xff0c;或者因为您需要仅由该特定环境提供的某些功能。 通常&#xff0c;…