ruby – 为什么重复的JSON解析消耗越来越多的内存?

栏目: Ruby · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/17153194/why-does-repeated-json-parsing-consume-more-and-more-memory

似乎在 Ruby 中一遍又一遍地解析相同的JSON文件会占用越来越多的内存.

考虑下面的代码和输出:

>为什么在第一次迭代后没有释放内存?

>解析后,为什么116MB JSON文件会占用1.5Gb的RAM?考虑到文本文件被转换为哈希值,这是令人惊讶的.我在这里想念的是什么?

码:

require 'json'

def memused
  `ps ax -o pid,rss | grep -E "^[[:space:]]*#{$$}"`.strip.split.map(&:to_i)[1]/1024
end

text = IO.read('../data-grouped/2012-posts.json')
puts "before parsing: #{memused}MB"
iter = 1
while true
  items = JSON.parse(text)
  GC.start
  puts "#{iter}: #{memused}MB"
  iter += 1
end

输出:

before parsing: 116MB
1: 1840MB
2: 2995MB
3: 2341MB
4: 3017MB
5: 2539MB
6: 3019MB

当Ruby解析JSON文件时,它会创建许多中间对象来实现目标. GC开始工作之前,这些对象会保留在内存中.

如果JSON文件具有复杂的结构,许多数组和内部对象,那么数字也会快速增长.

您是否尝试调用“GC.start”来建议Ruby清理未使用的内存?如果内存量

显着减少,它建议只是用于解析数据的中间对象,否则,您的数据结构很复杂,或者您的数据存在lib无法解除分配的内容.

对于大型JSON处理,我使用yajl-ruby( https://github.com/brianmario/yajl-ruby ).它是C实现的,占用空间小.

翻译自:https://stackoverflow.com/questions/17153194/why-does-repeated-json-parsing-consume-more-and-more-memory


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Computer Age Statistical Inference

Computer Age Statistical Inference

Bradley Efron、Trevor Hastie / Cambridge University Press / 2016-7-21 / USD 74.99

The twenty-first century has seen a breathtaking expansion of statistical methodology, both in scope and in influence. 'Big data', 'data science', and 'machine learning' have become familiar terms in ......一起来看看 《Computer Age Statistical Inference》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试