总览

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

塞尔吉奥·奥利维拉(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

使用直接内存时可以更快相关推荐

  1. nginx内存池大小快内存_使用直接内存时可以更快

    nginx内存池大小快内存 总览 使用直接内存不能保证提高性能. 考虑到它增加了复杂性,除非有充分的理由使用它,否则应避免使用它. 塞尔吉奥·奥利维拉(Sergio Oliveira Jr)的这篇出色 ...

  2. java 本地内存_哪个更快:Java堆还是本地内存

    使用Java的一个好处就是你可以不用亲自来管理内存的分配和释放.当你用new关键字来实例化一个对象时,它所需的内存会自动的在Java堆中分配.堆会被垃圾回收器进行管理,并且它会在对象超出作用域时进行内 ...

  3. 德鲁伊 oltp oltp_内存中OLTP –更快变得更简单!

    德鲁伊 oltp oltp In-memory OLTP is a revolutionary tool introduced on SQL Server 2014. On SQL Server 20 ...

  4. 【小睿精选·第四期】谷歌开源更快、更高效的 TensorFlow 运行时 TFRT

    [小睿精选] [小睿精选]第四弹来啦,本期共收录6条嵌入式资讯信息,希望可以帮到你.欢迎大家在文末留言,唠一唠你关注的话题,说不定下期就有你想要的惊喜! 1.中科蓝讯与阿里"平头哥" ...

  5. lan的以太网标准_并非所有以太网电缆都是平等的:通过升级,您可以获得更快的LAN速度...

    lan的以太网标准 Wired connections, which use Ethernet cables, are generally faster and have lower latency ...

  6. 三星android9更快么,三星S9将会成为最快Android手机 有6大要点你必须知道

    腾讯数码讯(云之外)三星将会在2月25日推出Galaxy S9,离现在只有不到2周的时间了,我们已经对手机的性能有了一些了解. 如果S9安装高通骁龙845芯片,它的速度将会比S8快30%,S8是三星目 ...

  7. 为了追求更快,CPU、内存、I/O都做了哪些努力?

    背景 曾经,我面试的时候有两个最怕的.一怕问算法,二怕问高并发. 算法这个,刷了不少LeetCode,发现还是有套路可循的,虽不敢说算法能力有多强,至少没有以前那么怕了(才怪). 而第二个,高性能高并 ...

  8. Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...

    2019独角兽企业重金招聘Python工程师标准>>> 前言 在 Android开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存 ...

  9. 哪个更快:Java 堆还是本地内存

    使用Java的一个好处就是你可以不用亲自来管理内存的分配和释放.当你用new关键字来实例化一个对象时,它所需的内存会自动的在Java堆中分配.堆会被垃圾回收器进行管理,并且它会在对象超出作用域时进行内 ...

最新文章

  1. 超四分之一的人工可能被机器取代,AI或成英国脱欧的一大阻碍
  2. How to uninstall git
  3. (五)资源优化 (经典性能优化解决方案)
  4. Wizard of Orz CodeForces - 1467A
  5. 又到一年“粽子节”,快来测测你包的粽子颜值几分
  6. C#Linq的10个练习
  7. submit与button区别提交区别
  8. 程序员离不开这 7 大编程方法!
  9. C#基础-Func,Action
  10. 同步现象 心理学_「心理学学了些什么?」基础心理学知识1
  11. cydia无法安装卸载插件_【初识太极】CAD卸载不干净无法重新安装怎么办?
  12. Android无线调试设备WIFI安装apk
  13. 一本通1325:【例7.4】 循环比赛日程表
  14. java实现计算器_Java 实现简单计算器
  15. 细说group by 和having 以及count函数的 联合使用
  16. svn + 百度云同步盘
  17. LeetCode(6)-Python-Z 字形变换(zigzag-conversion)
  18. 财务管理计算机实验日志5天,关于财务管理的实习日记范文
  19. 如何学好C语言,一个成功人士的心得!
  20. 吴恩达Coursera深度学习课程 deeplearning.ai (4-4) 神经风格转换--编程作业

热门文章

  1. javaI/O流小结
  2. thinking-in-java(13) String字符串
  3. LNCS用户写作指南【 Springer Computer Science Proceedings 】
  4. 快慢指针:141. 环形链表(判断是否存在环路)
  5. java –cp ./:_成为Java流专家–第2部分:中级操作
  6. java中的方法求和_在Java中模拟求和类型的巧妙解决方法
  7. jvm gc阻塞时长 占比_jvm进行转义分析需要多长时间? 可能比您想象的要长。
  8. java lambda::_基准测试:Java 8 Lambda和流如何使您的代码慢5倍
  9. 在邮件标头中找到无效的字符_在实践中重试HTTP标头
  10. 鸡肉和鸡蛋–测试前解决Spring属性