SORU
14 NİSAN 2011, PERŞEMBE


ByteBuffer.() ayırma vs ByteBuffer.()allocateDirect

Soru allocateDirect(), allocate() ya.

Birkaç yıl için şimdi ben sadece sıkışmış düşünce o zamandan beri DirectByteBuffers olan bir doğrudan bellek eşleme OS düzeyi, bu gerçekleştirmek daha hızlı almak/koymak aramalarından daha HeapByteBufferler. Ben şimdiye kadar hiç tam ayrıntılarını durumu ile ilgili bulmak gerçekten çok ilgilenmiş. Daha hızlı ve ne koşullarda olduğunu bilmek istiyorum.

CEVAP
15 NİSAN 2011, Cuma


Java NIO düşünmüştüm ne teklif gibi görünüyor mükemmel kitabında Ron Aksaklık sorunuza iyi bir cevap olabilir:

İşletim sistemi G/Ç gerçekleştirmek bellek alanı üzerinde işlem. Bu bellek alanları, bildiğim kadarıyla işletim sistem ilgili, bitişik değil bayt dizileri. Hiç de sürpriz değil tek bayt arabellek var o zaman I/katılmaya uygun Ç işlemleri. Ayrıca geri çağırma o işletim sistemi doğrudan erişim olacaktır Adres sürecinin alanı, bu durumda JVM işlemi, transfer için verileri. Bu bellek alanları anlamına gelir bu perations gerekir G/Ç hedeflerdir bayt bitişik dizileri. İçinde JVM bayt dizisi olmayabilir bellekte bitişik olarak depolanan veya Çöp Toplayıcı herhangi bir hareket olabilir zaman. Dizileri Java nesneleri ve yol verileri içinde saklanır nesne bir JVM farklı olabilir başka bir uygulama.

Bu nedenle, bir kavramı doğrudan tampon tanıtıldı. Direkt tamponlar etkileşim için tasarlanmıştır kanallar ve yerli ile O rutinleri. Mağaza için iyi bir çaba sarfeder bellek alanının byte elemanları kanal doğrudan, ya da ham,için kullanabilirsiniz erişim yerel kod anlatmak için kullanarak boşaltmak veya doldurmak için işletim sistemi bellek alanına doğrudan.

Doğrudan bit tamponlar genellikle vardır en iyi ben tercih işlemlerini. Tarafından tasarım, en çok onlar destek etkin G/Ç mekanizması için kullanılabilir JVM. Nondirect bayt arabellek olabilir kanallara geçti, ama bunu yaparken başarım sorunlarına. Bu genellikle mümkün bir nondirect için bir yerel hedef arabellek G/Ç işlemi. Eğer bir nondirect iletirseniz ByteBuffer için bir kanal için nesne kanal örtülü olarak yapabilir yazmak her arama aşağıdaki:

  1. Geçici doğrudan ByteBuffer oluşturun nesne.
  2. Bu nondirect içeriği kopyala geçici arabellek arabellek.
  3. Alt düzey G/Ç işlemi / gerçekleştirmek geçici tampon kullanarak.
  4. Geçici tampon nesneyi dışarı gidiyor kapsam ve sonunda çöp olur topladı.

Bu potansiyel olarak arabellek neden olur kopyalama ve nesne her I/O,yayık tam olarak hangi şeyler vardır kaçınmak istiyoruz. Ancak, göre Uygulanmasına Dair şeyler olmayabilir bu kötü olacak. Çalışma zamanı, muhtemelen olacaktır önbellek ve doğrudan tamponları yeniden ya diğer gösterişin artırmak için gerçekleştirin işlem hacmi. Eğer sadece oluşturuyorsanız tek seferlik bir tampon kullanın fark önemli değildir. Üzerinde eğer kullanacaksanız, diğer taraftan, sürekli bir tampon yüksek performanslı bir senaryo, sen daha iyi ayırma doğrudan tamponlar kapalı ve onları yeniden.

Doğrudan arabellek G/Ç için en uygun olan, ama daha pahalı olabilir nondirect bayt arabellek daha oluşturun. Bellek doğrudan arabellekleri tarafından kullanılır içinden çağırarak tahsis sistem özel yerli işletim kod, standart JVM yığın atlayarak. Kurma ve doğrudan yerle tamponlar önemli ölçüde daha fazla olabilir yığın yerleşik tamponlar daha pahalı, ana işletim sistemine bağlı olarak ve uygulama JVM. Bu bellek-depolama doğrudan tamponlar alanları çöp toplama tabi değildir standart dışında oldukları için JVM yığın.

Kullanarak performans karşılaştırılması doğrudan karşı nondirect tamponlar olabilir yaygın olarak JVM, işletim sistemine göre değişir ve tasarım kodu. Bellek ayırarak arabayı dışarıda, konu olabilir ek kuvvet için bir uygulama JVM farkında olan. Ne zaman haline getirerek ek hareketli parça oyun, elde emin olun istenen etkiyi. I recommend eski yazılım maxim: ilk olun iş, çabuk olun. Merak etme ön optimizasyonu hakkında çok fazla; doğruluğu üzerinde ilk konsantre. Bu JVM uygulanması mümkün olabilir tampon önbelleği gerçekleştirmek veya diğer sana verecek iyileştirmeleri performans olmayan bir çok ihtiyacın var sizin açınızdan gereksiz bir çaba.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010
  • pain975

    pain975

    27 NİSAN 2008
  • The Warp Zone

    The Warp Zon

    24 AĞUSTOS 2007