内存管理_使用直接内存时可以更快

内存管理

内存管理

总览

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

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

内存管理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值