Büyük CSV formatlı dosyaları (genellikle 200-600mb) verimli bir şekilde Java (daha az bellek ve mümkün olan en hızlı erişim) ile yüklemeye çalışıyorum. Şu anda, program Dize Dizileri Listesi kullanıyor. Bu işlem daha önce her bir CSV satırı için bir tablo ve her bir "satır" tablosunu tutan bir tablo kullanılarak bir Lua programıyla işlenmiştir. Aşağıda Java - büyük miktarda String dizisini verimli bir şekilde depolamak
bellek farklılıklar ve yükleme süreleri bir örnektir:- CSV Dosya - 232mb
- Lua - bellekte 1,378mb - - 157 saniye
- Java yüklemek için - bellekte 549mb 12 yüklenecek saniye
Doğru hatırlıyorsam, bir Lua tablosundaki öğeleri çoğaltmak, gerçek değere referans olarak bulunur. Java örneğinden şüpheleniyorum, Liste her bir yinelenen değerin ayrı kopyalarını tutuyor ve daha büyük bellek kullanımıyla ilgili olabilir. Aşağıda
CSV dosyaları elde edilen verilerle ilgili bazı arka plan: Her satır içinde- 3 olabilir "kırmızı", "yeşil" veya "mavi").
- İçerik içinde çoğaltması olan çoğaltması var. Aşağıda
- Arama tablo (alanlara göre sıralama).
- Dizeleri değiştirin veya değiştirin.
Soruma Soru: Verileri tutmak için daha az bellek gerektiren, ancak yine de verileri kolay ve hızlı bir şekilde arama/sıralama yapabilecek özellikler sunan bir koleksiyon var mı?
yalnızca birkaç olası değerleri tutan, yapabilirsin [stajyer onları] (http://docs.oracle bellek kullanımını azaltmak için./javase/7/docs/api/java/lang/String.html # intern% 28% 29). Ayrıca bakınız: http://stackoverflow.com/a/1855195/829571 – assylias
Teşekkürler assylias Bunu kullanarak bazı testler yapacağım. Kısa Strings için etkili olup olmadığını biliyor musunuz - E.g. "To" veya "Go". Alanların çoğu 45 karakter + olan dizeleri içerir, ancak bazıları oldukça kısadır (4 veya daha az). – user1816198
http://stackoverflow.com/questions/12792942/alternatives-to-java-string-interning adresine bakın –