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

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

内容简介:翻译自: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


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

查看所有标签

猜你喜欢:

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

孵化Twitter

孵化Twitter

[美]尼克·比尔顿(Nick Bilton) / 欧常智、张宇、单旖 / 浙江人民出版社 / 2014-1 / 49.90元

一个在挣扎中生存的博客平台Odeo,一小撮龙蛇混杂的无政府主义者员工,经历了怎样的涅槃,摇身一变,成为纽交所最闪耀的上市企业Twitter? 一个野心勃勃的农场小男孩,一个满身纹身的“无名氏“,一个爱开玩笑的外交家,一位害羞而又充满活力的极客,这四位各有特色的创始人如何从兢兢业业、每日劳作的工程师,成为了登上杂志封面、奥普拉秀和每日秀的富裕名人?而在Twitter日益茁壮成长的过程中,他们又......一起来看看 《孵化Twitter》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

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

正则表达式在线测试