2011-05-27 20 views
13

256 MB'den büyük arabellek boyutları ayırmaya çalıştığımda 64-bit JVM (Oracle) kullanıyorum ve "segmentation fault" hatası veriyor. Ben ve java NIO kullanarak doğrudan bellek arabellekleri ayırma ve bu nesneleri aynı makinede bir RMI istemci programına aktarma ve alma (Linux 64 bit).Java Segmentasyon hatası

Herhangi bir fikrin var mı?

+9

Biraz kod gönderir misiniz? –

+1

Maksimum yığın ayarınız nedir? – jtahlborn

+5

Bir segmentasyon hatası, yalnızca bir JNI kitaplığında veya JVM'de bir hata varsa oluşabilir. Çalışacağım ilk şey, Java 6 güncellemesi 25 veya en son sürüme sahip olduğunuzdan emin olmaktır. –

cevap

0

Hata raporundan aşağıdaki geçici çözümü denediniz mi?

ByteBuffer.allocateDirect() önce Run System.GC() ...

+0

Tamamen alakasız. Doğrudan tamponlar çöp toplama alanından çıkmaz. – EJP

+0

@EJP: Eğer hata raporunu okursanız, bunun neden yardımcı olabileceğine dair makul bir gerekçe verir. –

+0

Hiçbir zaman System.gc() 'nin bir şey yapamayacağından emin olamazsınız ... bu yüzden herhangi bir sorunu çözmek için iyi bir yol değil ... EJP'ye katılıyorum ve bu Görüşmenin çoğunda bu Bildirimi genişletecek durumlar tamamen ilgisiz. Programın bir GC yapmak istediği JVM'ye bir İPUCU ama JVM'nin yapıp yapmayacağını asla söyleyemezsin. – Chris

2

Segmentasyon Arızaları nedeniyle hafıza hataları (örneğin JVM gibi) programlarda olur. Ya JVM, içinde o kadar çok arabellek alanı kullanması gerektiğinde bilgisayarın belleğinin yanlış bölümünü kullanmaya çalıştığını veya 256M bellek ayırmaya çalıştığını ve işlemin daha fazla alan kullandığını gösteren bir hata içeriyor. bilgisayar verdi. Kısacası, 64 bit JVM'nin mevcut ayarları ile o kadar yer ayırmak için yapılmadığı gibi geliyor. Belki de JVM'yi yapılandırmaya çalışabilir, böylece başlamadan önce bilgisayardan daha fazla bellek ister. jtahlborn'un JVM'de maksimum yığın ayarının ne olduğunu sorduğunuza dair yorumu da, programı tekrar çalıştırmadan önce sormanız gereken bir sorudur.

İlgili konular