Ruby'de aynı JSON dosyasını tekrar tekrar ayrıştırmanın giderek daha büyük miktarda bellek kullandığı görünüyor. kodu ve aşağıda çıkışını düşünün: hafıza birinci tekrarlanmasından sonra serbest bırakılan edilmez NedenNeden yinelenen JSON ayrıştırma daha fazla bellek tüketiyor?
- ?
- Neden 116MB JSON dosyası ayrıştırıldıktan sonra 1,5Gb RAM alıyor? Metin dosyası karmaşaya dönüştürülürken şaşırtıcıdır. Burada neyi özlüyorum?
Kodu:
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
Çıktı:
before parsing: 116MB
1: 1840MB
2: 2995MB
3: 2341MB
4: 3017MB
5: 2539MB
6: 3019MB
Çöp toplayıcı, istediği zaman çalışır, bununla bir ilgisi yoktur * sen * İstediğin zaman ... – meagar
Program bellek tükendiğinde GC çalışmaz mı? Json 400 md olduğunda, ilk iterde 5 gr ram kullanır ve sonra takas kullanmaya başlar (ayrıştırmayı saniyeler yerine on dakika alır). Belleği temizlemek için GC'yi nasıl çağırırdım? – vrepsys
Ruby ve JSON hangi sürümleri kullanılıyor? –