Java, Python ve Ruby Dillerinin Performans Karşılaştırması Çanakkale Onsekiz Mart Üniversitesi Mustafa ŞAHİN Akademik Bilişim 2007 1 Dillerin seçim nedeni Java, Pyton ve Ruby ► ► ► ► Programlama dillerinin popülerliği her geçen gün artmaktadır. Nesneye yönelik program geliştirilebilir. Her üç dil de yorumlanarak çalıştırılır. Üç programlama dili de açık kaynaklıdır. Akademik Bilişim 2007 2 Performans Testleri Bu diller üzerinde daha öncede birçok performans testleri gerçekleştirilmiştir. Bu çalışmalarda programlama dillerinin eski sürümleri kullanılmıştır. Akademik Bilişim 2007 3 Gerçekleştirilen Testler Yapılan testlerde kullanılan uygulamalar aynı ihtiyaçlara cevap veren uygulamalardır. Testler her uygulama için 5 kez tekrarlanmıştır ve sonuç olarak ortalama değerler kullanılmıştır. Yapılan testler ile üç programlama dilinin ► Çalışma süreleri ► Bellek tüketimleri ► Yazılan kodun uzunluğu incelenmiştir. Akademik Bilişim 2007 4 Test uygulamalarının açıklamaları 1 [0..3,000,000] aralığındaki sayıların ortalamasının hesaplanması. 2 [2..50,000,000] aralığındaki asal sayıların hesaplanması. 3 [1..100,000,000] aralığında çalışan boş döngü. 4 500x500 boyutlarında iki matrisin çarpımı. 5 10,000 elemanlı, eleman değerleri en kötü durumda olan dizinin Kabarcık Sıralama (Bubble Sort) algoritması ile sıralanması. 6 Hanoi kuleleri probleminin 25 disk için öz yinelemeli çözümü. 7 100,000 elemanlı, eleman değerleri en kötü durumda olan dizinin Hızlı Sıralama (Quick Sort) algoritması ile sıralanması. 8 500,000 adet farklı dizginin listeye eklenmesi; eklenen ilk ve son elemanın liste içinde aranması. 9 500,000 adet farklı dizgi anahtarlarına sahip sayıların Eşleme (Map) veri yapısına eklenmesi; ilk ve son elemanın eşleme içinde aranması. 10 1,000,000 elemanlı, eleman değerleri en kötü durumda olan dizinin; dilin yerleşik sıralama algoritmaları kullanılarak sıralanması. 11 [0..1,000,000] aralığındaki sayıların dosyaya yazılması. Akademik Bilişim 2007 5 Kullanılan Test Ortamı ► ► ► ► ► ► HP Compaq NX9005 serisi Notebook 30 GB Harddisk 1 GB RAM Mobile AMD Athlon XP2400+ işlemci Windows 2003, Debian 3.1 Linux İşletim Sistemi Java 6.0, Python 2.5, Ruby 1.8.5 Akademik Bilişim 2007 6 Çalışma Süreleri (sn) Test No 1 2 3 4 5 6 7 8 9 10 11 Python 1,165 61,183 6,636 71,014 13,370 39,193 1,318 0,964 1,252 0,498 2,720 Ruby 4,228 105,512 16,854 248,661 83,744 86,773 4,979 4,402 6,427 1,197 3,964 Akademik Bilişim 2007 Java 0,056 8,354 0,182 8,288 0,278 0,369 0,054 2,191 3,221 2,189 0,846 7 Çalışma Süreleri (%) 100% 80% 60% Java 40% Ruby 20% Python 0% 1 2 3 4 5 6 7 8 9 10 11 Testler Akademik Bilişim 2007 8 Test Uygulamalarının Bellek Tüketim Yüzdeleri Test No 1 2 3 4 5 6 7 8 9 10 11 Python 0,2 20,4 0,2 1,3 1,3 0,2 0,4 2,3 3,5 8,3 0,2 Ruby 0,2 20,3 0,2 0,5 0,2 0,2 0,2 3,4 4,4 1,0 0,2 Akademik Bilişim 2007 Java 0,2 6,5 0,3 2,1 0,3 0,3 0,2 5,6 7,1 4,5 0,3 9 Test Uygulamalarının Bellek Tüketim Yüzdeleri 100% 90% 80% 70% 60% 50% Java 40% 30% 20% 10% 0% Ruby Python 1 2 3 4 5 6 7 8 9 10 11 Testler Akademik Bilişim 2007 10 Uygulamaların Satır Sayıları 60 Satır Sayıları 50 40 Python 30 Ruby Java 20 10 1 2 3 4 5 6 7 8 9 10 11 Testler Akademik Bilişim 2007 11 Uygulamalarda Kullanılan Karakter Sayıları 1800 Karakter Sayıları 1600 1400 1200 Python 1000 Ruby 800 Java 600 400 200 1 2 3 4 5 6 7 8 9 10 11 Testler Akademik Bilişim 2007 12 Sonuçlar ► ► Ruby ve Python ile yazılan uygulamaların geliştirilme süreleri ve kod uzunlukları, Java ile yazılan uygulamaların geliştirme süresi ve kod uzunluğunun yarısıdır. Ruby programlama dili ile yazılan uygulamalar diğer programlama dillerine göre en kısa kod uzunluğuna sahiptir. Akademik Bilişim 2007 13 Sonuçlar ► Ruby en az bellek tüketen programlama dilidir. ► Python en çok bellek tüketen programlama dilidir. Akademik Bilişim 2007 14 Sonuçlar ► Java, Python programlama diline göre 7.5 kat daha hızlı, Ruby programlama diline göre 21 kat daha hızlı çalışmaktadır. Akademik Bilişim 2007 15 Sonuçlar ► Java programlama dili dizgi(string) işlemlerinde Python programlama diline göre yavaş çalışmaktadır. ► Python, Ruby programlama dilleri dizi işlemlerinde liste veri yapılarını kullandıkları için oldukça yavaştırlar. Akademik Bilişim 2007 16 Teşekkürler Oğuz YARIMTEPE ve Pınar YANARDAĞ ’a Python ve Ruby dillerinde test uygulamalarını geliştirmemde yardımlarından dolayı teşekkür ediyorum. Davut AKÇİÇEK ve Hande ŞEN ’e yardımlarından dolayı teşekkür ediyorum. Akademik Bilişim 2007 17 Java, Python ve Ruby Dillerinin Performans Karşılaştırması Çanakkale Onsekiz Mart Üniversitesi Mustafa ŞAHİN Akademik Bilişim 2007 18