2009-12-02 35 views
8

JarBundler kullanılarak paketlenmiş bir Java uygulamasına sahibim. App oldukça yoğun CPU (büyük Collection.sort() çağrıları).64 bit Java VM uygulaması 10x daha yavaş çalışır

Mac OS'de, uygulama, 64 bit JavaApplicationStub kullanıldığında yavaş çalışır ve durgun olur. Bu JavaApplicationStub dosyası Java 64 bit VM'yi başlatıyor.

Sadece 32-bit olan eski bir JavaApplicationStub dosyası buldum. Bunu Bundle'da değiştirdim ve uygulama 10 kat daha hızlı çalışıyor! (sonuç olarak, uygulama çalıştırıldığında 32 bit VM kullanılır).

Bu herhangi bir anlam ifade ediyor mu? 64 bit VM neden bu kadar yavaş? Bir uygulama oluşturmak ve JavaApplicationStub dosyasını bu şekilde kesmek mantıklı mı?

Advise takdir edilmektedir.

+2

Sadece kontrol olsun, ama yayınladığınız donanım nedir sonuçlarına anlat bize? –

+1

Özellikle ne kadar belleğiniz var. Makine değişiyorsa lütfen aktivite görüntüleyiciyle görüşün. –

+0

MacBook Core'da Çalıştırma 2 Duo 10.5.8 – craiglurey

cevap

5

64bit JVM çalıştırmanın yararları/dezavantajları hakkında this post'a bakın. Özet işaretçi hatası giderme & bellek ayırma işleminin daha uzun sürebilir - ve daha büyük veri yapıları (örneğin, açık bir şekilde yararlanmadığınız sürece size yarar sağlamayan 64 bit değil, 32 bit) hareket ediyorsunuz.

performansında bu düşüşün nedeni aslında:

Ayrıca ne karşılaştığınız ile in-line olan 64 bit, hareket zaman% 85'e varan performans azalmaları tartışmak this relevant article, bkz hafızadaki artışla çok ilgili. Java kapaklarının altındaki bellek referansları, WAS çalışma zamanında ve uygulamanızın nesnelerindeki bellek yapılarının boyutunu artıran iki kat büyüklüğündedir. Ne yazık ki, işlemci bellek önbellek boyutları aynı anda daha büyük olmadı. Bu daha fazla bellek önbellek özlüyor demektir, yani daha büyük bellekle uğraşan donanım için daha yoğun çalışma anlamına gelir, bu da daha kötü uygulama performansı anlamına gelir.

+1

Eğer 32-bit'e yapışma cevapsa, bunu yapmanın en iyi yolu nedir? JavaApplicationStub, 32 bit sürümüne geri döndürülmeli mi yoksa farklı VM parametreleriyle mi çalıştırılmalıdır? – craiglurey

+0

Bir JavaApplicationStub/mac kullanıcısı değilim ve bununla ilgili herhangi bir dokümanı bulamadım, ancak standart Sun jvm'de, 32bit modda 64bit jvm seçeneği bulunmadığını söyleyebilirim (http: //java.sun.com/javase/technologies/hotspot/vmoptions.jsp#BehavioralOptions) eğer yapabiliyorsanız, sadece 32 bit yapısını kullanın. – Joel

-1

64 bit daha yavaş değil. Dene:

public class Benchmark { 
public static void main(String args[]) { 
long time = System.currentTimeMillis(); 
for (int a = 1; a < 900000000; a++) { 
    for (int b = 1; b < 20; b++) { 
    } 
} 
long time2 = System.currentTimeMillis() - time; 
System.out.println("\nTime counter stopped: " + time2); 
32 yılında

}

ve 64 ve

İlgili konular