Verileri bellekte oldukça karmaşık ve büyük bir veri yapısına (birkaç GB) hazırlayan ve diske dönüştüren bir Java programına ve bellekteki serileştirilmiş veri yapısını okuyan başka bir programa sahip bir Java programım var. Seri hale getirme adımının oldukça yavaş olduğunu ve CPU'ya bağlı olduğunu fark ettim. (top
'da% 100 CPU kullanımı, ancak sadece 3 ila 5 MB/s, iotop
ile okunmaktadır, ki bu sabit sürücüde sıralı okumalar için çok düşüktür). CPU oldukça yeni (Core i7-3820), yapı belleğe sığar, swap alanı yapılandırılmamış.Java Deserialization neden CPU'ya bağlı?
Neden böyle? Java'daki nesneleri, darboğaz olarak kullanmayan nesneleri serileştirmenin alternatif bir yolu var mı?
FileInputStream f = new FileInputStream(path);
ObjectInputStream of = new ObjectInputStream(f);
Object obj = of.readObject();
IIRC. Bu yavaş. Tüm bunlardan kaçınmak için kavramsal olarak kolay ama "yazmanın bir sürü" yolu var - bunu elle yapın. Yani, nesnel olarak, alana göre, ikili bir akışa nesneleri yazınız. Ve yükleme için ters. – harold
Bu yardımcı olabilir: http://vanillajava.blogspot.co.uk/2011/10/serialization-using-bytebuffer-and.html – assylias
'FileInputStream' bir' BufferedInputStream' ile sarmayı deneyebilir misiniz? –